在 C 中设置和清除位
Setting and clearing bits in C
我在执行一些位操作的 C 程序时遇到了一些问题。在程序中,我用一个unsigned long long int变量来表示一个64位的地图,每一位代表地图上的一个位置。我需要能够更新这些位(位置),即设置或清除位。
要清除和设置位,我这样做(0 是最不重要的位置):
map &= ~(1 << pos) // clear bit in position 'pos'
map |= (1 << pos) // set bit in position 'pos'
问题是,当我执行这些操作时,映射中 pos
左侧的所有位都设置为 0(而我只想要位置 pos
中的位改变)。
我做错了什么?
问题是这些移位是使用类型 int
完成的,在所有现代 64 位系统上仍然是 32 位。您需要使用与 map
相同的类型,即 unsigned long long
:
1ull << pos
注意 ull
告诉编译器 1
不是 int
而是 unsigned long long
.
我在执行一些位操作的 C 程序时遇到了一些问题。在程序中,我用一个unsigned long long int变量来表示一个64位的地图,每一位代表地图上的一个位置。我需要能够更新这些位(位置),即设置或清除位。 要清除和设置位,我这样做(0 是最不重要的位置):
map &= ~(1 << pos) // clear bit in position 'pos'
map |= (1 << pos) // set bit in position 'pos'
问题是,当我执行这些操作时,映射中 pos
左侧的所有位都设置为 0(而我只想要位置 pos
中的位改变)。
我做错了什么?
问题是这些移位是使用类型 int
完成的,在所有现代 64 位系统上仍然是 32 位。您需要使用与 map
相同的类型,即 unsigned long long
:
1ull << pos
注意 ull
告诉编译器 1
不是 int
而是 unsigned long long
.