在C中更改int中的位?

在C中更改int中的位?,c,int,bit,C,Int,Bit,所以我有一个16位的数字。假设它的变量名是Bits。我想使位[2:0]=001、100和000,而不改变任何其他内容。我不知道该怎么做,因为我所能想到的就是把我想成为1的位与1进行O运算,但我不知道如何清除其他位,使它们为0。如果有人有什么建议,我将不胜感激。谢谢 要清除某些位,和与要清除的位相反。然后你可以用你想要的比特数| 在本例中,您希望将较低的三位(二进制的111或十进制的7)归零,因此我们使用&清除这些位 Bits = (Bits & ~7) | 1; // set lower

所以我有一个16位的数字。假设它的变量名是Bits。我想使位[2:0]=001、100和000,而不改变任何其他内容。我不知道该怎么做,因为我所能想到的就是把我想成为1的位与1进行O运算,但我不知道如何清除其他位,使它们为0。如果有人有什么建议,我将不胜感激。谢谢

要清除某些位,
与要清除的位相反。然后你可以用你想要的比特数
|

在本例中,您希望将较低的三位(二进制的
111
或十进制的
7
)归零,因此我们使用
&
清除这些位

Bits = (Bits & ~7) | 1; // set lower three bits of Bits to 001

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.bit0
访问该变量的每一位

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

如果您打算只更改最后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++可移植性,你可能宁愿用“NNSONEXO../P>提出的”,首先,它不会被称为“位”,它被称为“位”,但是移位操作不会因为它的移位而改变其他位吗?MSB也会改变,除非你做了正确的算术移位,但这会改变数字的其余部分。如果询问者不知道位运算符,这可能有助于解释
~7
的用途。