为了了解行进立方体算法,我遵循此页面: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