Objective c 目标c:整数的二进制运算?
我对以下代码片段有基本的逻辑问题:Objective c 目标c:整数的二进制运算?,objective-c,c,xcode,binary,bit-shift,Objective C,C,Xcode,Binary,Bit Shift,我对以下代码片段有基本的逻辑问题: 1 uint64_t RMTileKey(RMTile tile) 2 { 3 uint64_t zoom = (uint64_t) tile.zoom & 0xFFLL; // 8bits, 256 levels 4 uint64_t x = (uint64_t) tile.x & 0xFFFFFFFLL; // 28 bits 5 uint64_t y = (
1 uint64_t RMTileKey(RMTile tile)
2 {
3 uint64_t zoom = (uint64_t) tile.zoom & 0xFFLL; // 8bits, 256 levels
4 uint64_t x = (uint64_t) tile.x & 0xFFFFFFFLL; // 28 bits
5 uint64_t y = (uint64_t) tile.y & 0xFFFFFFFLL; // 28 bits
6
7 uint64_t key = (zoom << 56) | (x << 28) | (y << 0);
8
9 return key;
10 }
1 uint64\u t RMTileKey(RMTile tile)
2 {
3 uint64_t zoom=(uint64_t)tile.zoom&0xFFLL;//8位,256级
4 uint64_t x=(uint64_t)tile.x&0xFFFFFFFLL;//28位
5 uint64_t y=(uint64_t)tile.y&0xFFFFFFFLL;//28位
6.
7 uint64_t键=(缩放第一次-
&
是二进制AND运算符。
|
是二进制或运算符
第3行将tile.zoom
的LSB分配给zoom
(模块0x100)
第4行将tile.x
的28个最低有效位分配给x
(模块0x10000000)
第5行与第4行相同
第7行将通过将上述所有变量放入key
的不同位(偏移量)来构造key变量
第一-
&
是二进制AND运算符。
|
是二进制或运算符
第3行将tile.zoom
的LSB分配给zoom
(模块0x100)
第4行将tile.x
的28个最低有效位分配给x
(模块0x10000000)
第5行与第4行相同
第7行将通过将上述所有变量放入key
的不同位(偏移量)来构造key变量
第3行:zoom
清除了除0到7位以外的所有位:0000…000zzzzzz
8位
第4行:x
清除了除0到27位以外的所有位:0000…000xxxx…xxxx
;28位
第5行:y
清除了除0到27位以外的所有位:0000…000yyyy…yyyy
;28位
第7行:重新排列位以生成单个64位值:
,--------------------- bit 56
/ ,----------- bit 28
/ / ,- bit 0
zzzzzzzzxxxx...xxxxyyyy...yyyy
zoom<<56 x<<28 y<<0
,--------------第56位
/,--------------第28位
//,-位0
zzzzzzxxxx…xxxxyyyy…yyyy
缩放第3行:zoom
清除了除0到7位以外的所有位:0000…000zzzzzz
8位
第4行:x
清除了除0到27位以外的所有位:0000…000xxxx…xxxx
;28位
第5行:y
清除了除0到27位以外的所有位:0000…000yyyy…yyyy
;28位
第7行:重新排列位以生成单个64位值:
,--------------------- bit 56
/ ,----------- bit 28
/ / ,- bit 0
zzzzzzzzxxxx...xxxxyyyy...yyyy
zoom<<56 x<<28 y<<0
,--------------第56位
/,--------------第28位
//,-位0
zzzzzzxxxx…xxxxyyyy…yyyy
zoomI知道这是AND运算符和|或用于二进制文件,我现在明白了你对第3、4、5行的看法。但是为什么我在第7行使用Or运算符将它们放入不同的位?它是如何工作的?我知道这是AND运算符和|或用于二进制文件,我现在明白了你对第3、4、5行的看法。但我为什么使用Or运算符呢在第7行输入不同的位?如何工作?喜欢布局和解释。+1喜欢布局和解释。+1