gpt4 book ai didi

c - 在 C 中设置和清除位

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:22 24 4
gpt4 key购买 nike

我在执行一些位操作的 C 程序时遇到了一些问题。在程序中,我用一个unsigned long long int变量来表示一个64位的 map ,每一位代表 map 上的一个位置。我需要能够更新这些位(位置),即设置或清除位。要清除并设置位,我会这样做(0 是最不重要的位置):

map &= ~(1 << pos) // clear bit in position 'pos'
map |= (1 << pos) // set bit in position 'pos'

问题是,当我执行这些操作时, map 中 pos 左侧的所有位都设置为 0(而我只想要位置 pos 的位 来改变)。

我做错了什么?

最佳答案

问题是这些移位是使用 int 类型完成的,在所有现代 64 位系统上它仍然是 32 位。您需要使用与 map 相同的类型,即 unsigned long long:

1ull << pos

注意 ull 告诉编译器 1 不是 int 而是 unsigned long long .

关于c - 在 C 中设置和清除位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com