设置和清除C中的位 [英] Setting and clearing bits in C

查看:0
本文介绍了设置和清除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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆