我根本不明白这段代码在做什么,有人可以解释一下吗?
long input; //just here to show the type, assume it has a value stored
unsigned int output( input >> 4 & 0x0F );
谢谢
我根本不明白这段代码在做什么,有人可以解释一下吗?
long input; //just here to show the type, assume it has a value stored
unsigned int output( input >> 4 & 0x0F );
谢谢
将输入的 4 位向右位移,然后用低 4 位屏蔽。
以这个 16 位数字为例:(点仅用于视觉分离)
1001.1111.1101.1001 >> 4 = 0000.1001.1111.1101
0000.1001.1111.1101 & 0x0F = 1101 (or 0000.0000.0000.1101 to be more explicit)
& 是按位与运算符。有时会使用“& 0x0F”来用 0 填充前 4 位,或者忽略值中的第一个(最左边)4 位。
0x0f = 00001111。因此,0x0f 与任何其他位模式的按位 & 操作将仅保留最右边的 4 位,清除左边的 4 位。
如果输入的值为 01010001,在执行 &0x0F 之后,我们将得到 00000001 - 这是我们在清除左 4 位后得到的模式。
再举一个例子,这是我在项目中使用的代码:
字节verflag = (Byte)(bIsAck & 0x0f) | ((版本 << 4) & 0xf0)。在这里,我将两个值组合成一个 Byte 值以节省空间,因为它在数据包头结构中使用。bIsAck 是 BOOL,version 是 Byte,其值非常小。因此,这两个值都可以包含在单个 Byte 变量中。
结果变量中的第一个半字节将包含版本的值,第二个半字节将包含 bIsAck 的值。我可以在接收时通过执行 4 位 >> 将值检索到单独的变量中,同时获取版本的值。
希望这与您的要求接近。
那就是将“输入”的内容按位右移 4 位,然后将结果与 0x0F (1101) 进行按位与。
它的作用取决于“输入”的内容和类型。它是一个整数吗?沿着?一个字符串(这意味着在指向第一个字节的指针上进行移位和按位与)。
Google for "c++ bitwise operations" 了解更多关于幕后发生的事情的细节。此外,请查看C++ 运算符优先级,因为 C/C++ 的优先级与许多其他语言中的不同。