Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标c:整数的二进制运算?_Objective C_C_Xcode_Binary_Bit Shift - Fatal编程技术网

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