c语言中int转换成bit,在C中更改int中的位?

union结构允许指定一个具有可变的比特数和单独地寻址一个更大的变量的每一个比特的能力。

union {

short value;

struct {

unsigned char bit0 : 1;

unsigned char bit1 : 1;

unsigned char bit2 : 1;

unsigned char bit3 : 1;

unsigned char bit4 : 1;

unsigned char bit5 : 1;

unsigned char bit6 : 1;

unsigned char bit7 : 1;

unsigned char bit8 : 1;

unsigned char bit9 : 1;

unsigned char bit10 : 1;

unsigned char bit11 : 1;

unsigned char bit12 : 1;

unsigned char bit13 : 1;

unsigned char bit14 : 1;

unsigned char bit15 : 1;

} bits;

} var;

现在你有一个名为var持有的16位整数,它可以通过var.value引用变量,你必须通过var.bits.bit15 acessing var.bits.bit0访问该变量的每个单独的位。

通过设置var.value = 0;所有位也被设置为0。通过设置var.bits.bit0 = 1;,您可以自动将var.value的值更改为0x8000,或者如二进制1000000000000000所示。

如果你的目的是改变只有最后3位,可以简化结构,以更多的东西是这样的:

union {

short value;

struct {

unsigned short header : 13;

unsigned char bit13 : 1;

unsigned char bit14 : 1;

unsigned char bit15 : 1;

} bits;

} var;

现在你有var.bits.header,这是一个13位的变量,而其他3 1位变量,你可以玩。

但是请注意C++不支持这种结构,所以为了获得最佳的C到C++可移植性,您可能更愿意使用bitwise operations,而不是像@nneonneo所建议的那样。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值