沿钻头和或或OR进行行进



为了了解行进立方体算法,我遵循此页面:http://paulbourke.net/geometry/polygonise/

我有一些问题:Bitwise&和|意思是?

  • if(grid.val [0]< isolevel)CubeIndex | = 1;

  • if(可用[CubeIndex]& 1) vertlist [0] = vertexinterp(isolevel,grid.p [0],grid.p [1],grid.val [0],grid.val [1]);

不会读取长时间的文字。但是在这里,您可以找到位运算符的工作https://en.wikipedia.org/wiki/bitwise_operations_in_c。

cubeindex |= 1 --> cubeindex = cubeindex | 1. 

例如CubeIndex = 26(binary 11010)和1(binary 00001

11010  | 00001 = 11011

在这里,您是一个26-> 27。

对于以下edgeTable[cubeindex] & 1

例如CubeIndex = 17(binary 10001

10001 &  00001  = 00001

这将成为1.在if语句中使用的,这只需检查数字edgeTable[cubeindex]是否包含位00001并相应地返回真或错误。

希望这会有所帮助:)

欢呼

bitwise&(and)和|(或)在整数值中运行所有位。它独立地在每个位上运行,并且经常与您一起使用,其中包含一组布尔真实值(又称标志),以指示各种对象的状态。它也可以使用(如示例中)或测试特定标志而不修改其他标志。

整数中的位表示两个值的幂。如果该位设置为true,那么两个功率将包含在其值中。如果该位是错误的,则不包括。最低显着的位B0代表2^0,位1代表2^1,依此类推。

例如,二进制中的值5 = 101,因为5 = 2^2 2^0 = 4 1 = 5

bitwise或通过将结果设置为1来工作,如果两个操作数中的任何一个都包含一个位置。在且仅当两个操作数在该位置中都有1时,位于钻头和锻炼。

例如:

Bitwise OR:     5 | 9 = 0101 | 1001 = 1101
Bitwise AND:    5 & 9 = 0101 & 1001 = 0001

使用这些运算符,如果CubeIndex中的位值集代表一组状态(是或错误的值),那么您可以使用相同的位操作数来测试,并且特定状态是正确的,而忽略其他位。

在您的示例中:

cubeindex |= 1

将CubeIndex中最小的位设置为True(1)无论以前是什么。这是因为位值或任何位值为0的位值是相同的位值,而位值或任何位值1始终为1,因此与将位设置为1的位相同,无论其先前的STAE如何。它等效于:

CubeIndex = CubeIndex |000000000000000001 = CubeIndex,B0设置为1

逻辑并用于测试是否最不可显着的零件[CubeIndex]等于1.只有当该值的B0为1时,条件才是正确的。为什么?为什么?因为其他位无关紧要,因为它们是位且为零的,始终为零。

可用[CubeIndex]&1 =位0

的值

相关内容

  • 没有找到相关文章

最新更新