繁体   English   中英

目标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运算符。

  1. 第3行将分配tile.zoom的LSB进行zoom (模数为0x100)
  2. 第4行会将tile.x的28个最低有效位tile.xx (即模0x10000000)
  3. 第5行作为第4行。

  4. 7线将通过将在不同的比特(偏移)所有上述变量的构造的关键变量key

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM