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