Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
Swift 范围内值的位操作_Swift_Operators_Bit Manipulation_Bitwise Operators_Binary Operators - Fatal编程技术网

Swift 范围内值的位操作

Swift 范围内值的位操作,swift,operators,bit-manipulation,bitwise-operators,binary-operators,Swift,Operators,Bit Manipulation,Bitwise Operators,Binary Operators,我有一个由掩码applicationReserved=0x0F000000指示的4位范围的选项集。由此,我想生成可能的值0x01000000,0x02000000,0x03000000 我已经提出了一些可能的解决方案,但我想可能有比这更清楚的表达方式: applicationReserved & -applicationReserved applicationReserved & -applicationReserved << 1 ... 我认为这与你在评论中描述的

我有一个由掩码
applicationReserved=0x0F000000
指示的4位范围的选项集。由此,我想生成可能的值
0x01000000
0x02000000
0x03000000

我已经提出了一些可能的解决方案,但我想可能有比这更清楚的表达方式:

applicationReserved & -applicationReserved
applicationReserved & -applicationReserved << 1
...

我认为这与你在评论中描述的最接近:

let x = 0x0F0000000
var offset = 0

while offset < 63 && (x & (1 << offset)) == 0 { offset += 1 }

for i in 0..<16 {
    let y = i << offset
    print(String(y, radix: 16))
}
设x=0x0F0000000
var偏移量=0

当偏移量<63&&(x&(1)时,一个范围必须有一个开始和一个结束。你只有一个边界。我不理解这个问题,我也不理解解决方案。给定你描述的一组可能的值,你的意思是任何
x
这样的
(x&applicationReserved)!=0
都是保留的吗?如果是,那么“解决方案”是什么甚至意味着-你想测试那个条件吗?生成它们吗?在这个特定的实例中,你实际上在做什么?我认为这只是假设它是一个4位的范围。
applicationReserved=0x0F000000
表示
0x010000000-0x0F0000000
。下面是这个特定实现的示例。@harold我想生成给定
x=0x0F000000
从该链接生成值
0x01000000
0x02000000
0x03000000
的最简单方法是什么?似乎有4位是为应用程序使用保留的,您可以将它们生成为
x
let x = 0x0F0000000
var offset = 0

while offset < 63 && (x & (1 << offset)) == 0 { offset += 1 }

for i in 0..<16 {
    let y = i << offset
    print(String(y, radix: 16))
}