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