0

我正在使用 C 开发我的程序,我从示例代码中发现

unHiByte = unVal >> 8;

这是什么意思??如果unVal = 250. unHiByte的价值是什么?

我真的对此感到困惑..请帮助..

提前致谢..

4

4 回答 4

3

编程中的“>>”是按位运算。操作>>表示右移操作。所以 unVal >> 8 意味着将 unVal 右移 8 位。将位向右移动可以解释为将值除以 2。

因此,unHiByte = unval >> 8 表示 unHiByte = unVal/(2^8)(将 unVal 除以 8 次)

于 2013-10-03T07:37:35.310 回答
0

不涉及移位运算符本身(因为已经回答了),这里假设 unVal 是一个两字节变量,具有一个高字节(高 8 位)和一个低字节(低 8 位)。目的是获得仅由高 8 位产生的值并丢弃低位。

班次运算符虽然应该很容易通过任何书籍/教程来学习,这也许是有人否决这个问题的原因。

于 2013-10-03T07:44:25.950 回答
0

>>按位右移

它对位进行操作。与unHiByte = unVal >> 8;何时unVal=250

它的二进制形式是11111010

右移意味着将位向右移动。因此,当您移动时1111 1010,您会得到向右 8 位数字0000 0000

注意:>>你可以通过将左边的数字除以2^(右边的数字>>)轻松确定右移运算结果

所以,250/28= 0

于 2013-10-03T07:48:19.960 回答
-1

互联网上没有一个人能够以简单的方式描述这个简单的事情,所有人都只是抛出它的定义,而不是它为什么被使用的应用程序。这里是理解。

例如:如果你有一个十六进制的 0x2A63 并且你想取出 2A 或者你想从中取出 63,那么你会这样做。

例如,仅供参考,如果我们将 2A63 转换为二进制,即:0010101001100011。(即 16 位)(前 8 位是 2A,第二位是 63)问题是二进制总是从右开始。所以我们必须将前 8 位 (2A) 推到右侧才能得到它。

第 1 行:uint16_t 十六进制 = 0x2A63;

第 2 行:uint8_t part2A = (uint8_t)(hex >> 8) // 将第一个 // 八位 (2A) 推到右侧, (63) 不碍事。现在我们有 0000000000101010

// 现在第 2 行为我们返回最后 8 位 (2A) 的 0x2A。

第 3 行:// 要获得 63,我们将简单地执行以下操作:

uint8_t part63 = (uint8_t)十六进制;// 默认情况下,63 在二进制文件的最右侧。

就是这么简单。

于 2021-07-04T10:52:28.920 回答