[英]Referencing integers in an array for completing math operations in objective C
[英]Objective c: binary operations with Integers?
我对以下代码段有基本的逻辑疑问:
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 }
返回值键是一个无符号整数。 我现在很困惑,因为我不明白第3(4,5)行中发生了什么。 运算符&用我的uint64_t做些什么。 我猜它正在转换为十六进制值? 然后在第7行中,我从位0移到27(从28到56 ...)并合并这些基于十六进制的数字?
第3行: zoom
具有除0至7以外的所有位清除: 0000...000zzzzzzzz
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
首先- &
是二进制AND运算符。 |
是二进制OR运算符。
tile.zoom
的LSB进行zoom
(模数为0x100) tile.x
的28个最低有效位tile.x
给x
(即模0x10000000) 第5行作为第4行。
7线将通过将在不同的比特(偏移)所有上述变量的构造的关键变量key
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.