设置和清除C中的位 [英] Setting and clearing bits in C
本文介绍了设置和清除C中的位的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在执行一些位操作的C程序时遇到了一些问题。在程序中,我使用一个无符号的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中的位的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文