我正在使用 C 开发我的程序,我从示例代码中发现
unHiByte = unVal >> 8;
这是什么意思??如果unVal = 250
. unHiByte的价值是什么?
我真的对此感到困惑..请帮助..
提前致谢..
我正在使用 C 开发我的程序,我从示例代码中发现
unHiByte = unVal >> 8;
这是什么意思??如果unVal = 250
. unHiByte的价值是什么?
我真的对此感到困惑..请帮助..
提前致谢..
编程中的“>>”是按位运算。操作>>表示右移操作。所以 unVal >> 8 意味着将 unVal 右移 8 位。将位向右移动可以解释为将值除以 2。
因此,unHiByte = unval >> 8 表示 unHiByte = unVal/(2^8)(将 unVal 除以 8 次)
不涉及移位运算符本身(因为已经回答了),这里假设 unVal 是一个两字节变量,具有一个高字节(高 8 位)和一个低字节(低 8 位)。目的是获得仅由高 8 位产生的值并丢弃低位。
班次运算符虽然应该很容易通过任何书籍/教程来学习,这也许是有人否决这个问题的原因。
它对位进行操作。与unHiByte = unVal >> 8;
何时unVal=250
。
右移意味着将位向右移动。因此,当您移动时1111 1010
,您会得到向右 8 位数字0000 0000
。
注意:>>
你可以通过将左边的数字除以2^(右边的数字>>
)轻松确定右移运算结果
所以,250/2
8= 0
互联网上没有一个人能够以简单的方式描述这个简单的事情,所有人都只是抛出它的定义,而不是它为什么被使用的应用程序。这里是理解。
例如:如果你有一个十六进制的 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 在二进制文件的最右侧。
就是这么简单。