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))
}