C++ 这是干什么的;输入>&燃气轮机;四,;0x0F";?

C++ 这是干什么的;输入>&燃气轮机;四,;0x0F";?,c++,bitwise-operators,C++,Bitwise Operators,我根本不明白这个代码在做什么,有人能解释一下吗 long input; //just here to show the type, assume it has a value stored unsigned int output( input >> 4 & 0x0F ); 多亏了位将输入的4位右移,然后用较低的4位屏蔽 以16位数字为例:(点仅用于视觉分离) 也就是说,将“输入”的内容按位右移4位,然后用0x0F(1101)对结果进行位AND运算 它的作用取决于“输入”的

我根本不明白这个代码在做什么,有人能解释一下吗

long input;  //just here to show the type, assume it has a value stored
unsigned int output( input >> 4 & 0x0F );

多亏了

位将输入的4位右移,然后用较低的4位屏蔽

以16位数字为例:(点仅用于视觉分离)


也就是说,将“输入”的内容按位右移4位,然后用0x0F(1101)对结果进行位AND运算

它的作用取决于“输入”的内容和类型。是整数吗?很久了?字符串(表示移位和按位,并在指向第一个字节的指针上执行)

谷歌搜索“c++按位操作”,了解更多关于引擎盖下发生的事情的详细信息。
此外,请注意,因为C/C++优先级与许多其他语言中的优先级不完全相同。

&是按位AND运算符。“&0x0F”有时用于将前4位填充为0,或忽略值中的前4位(最左边)

0x0f=00001111。因此,0x0f与任何其他位模式的按位&操作将只保留最右边的4位,清除左边的4位

如果输入值为010100001,在执行&0x0F之后,我们将得到00000001-这是在清除左4位后得到的模式

另一个例子是,这是我在一个项目中使用的代码:

Byte verflag=(Byte)(bIsAck&0x0f)|((version>),同时获取version的值


希望这与您的要求相近。

对不起,我应该指定上下文。我在原始帖子中编辑了代码。
1001.1111.1101.1001 >> 4 = 0000.1001.1111.1101

0000.1001.1111.1101 & 0x0F = 1101 (or 0000.0000.0000.1101 to be more explicit)