PowerShell 技能连载 - 管理比特标志位(第三部分)

对十进制数设置比特标志位不是很难,但是不够直观。以下是一个快速的新方法,演示如何设置或取消一个数字中特定的比特:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$decimal = 6254
[Convert]::ToString($decimal, 2)

# set bit 4
$bit = 4
$decimal = $decimal -bor [Math]::Pow(2, $bit)
[Convert]::ToString($decimal, 2)

# set bit 0
$bit = 0
$decimal = $decimal -bor [Math]::Pow(2, $bit)
[Convert]::ToString($decimal, 2)

# clear bit 1
$bit = 1
$decimal = $decimal -band -bnot [Math]::Pow(2, $bit)
[Convert]::ToString($decimal, 2)

结果演示了代码做了什么。ToString() 从右到左显示比特,所以第 0 比特是在最右边。在第二行和第三行,设置了两个独立的比特位,而并不影响其它位。在最后一行中,清除了一个比特位。

1
2
3
4
1100001101110
1100001111110
1100001111111
1100001111101

本文国际来源:Managing Bit Flags (Part 3)

评论