hibyte = Value >> 8 是啥意思?
Posted
技术标签:
【中文标题】hibyte = Value >> 8 是啥意思?【英文标题】:What does hibyte = Value >> 8 meaning?hibyte = Value >> 8 是什么意思? 【发布时间】:2013-10-03 07:32:17 【问题描述】:我正在使用 C 开发我的程序,我从示例代码中发现了
unHiByte = unVal >> 8;
这是什么意思??如果unVal = 250
。 unHiByte 的价值是多少??
我真的对此感到困惑..请帮助..
提前谢谢..
【问题讨论】:
Shift Operators: >> and << 阅读What does this “>>=” operator mean in C? 为什么不自己尝试一下呢? 我认为 OP 与原因混淆了,即使用位移的高级意图。为这种可能性 +1 【参考方案1】:">>" 在编程中是按位运算。操作>>表示右移操作。 所以 unVal >> 8 意味着将 unVal 右移 8 位。将位右移可以解释为将值除以 2。
因此, unHiByte = unval >> 8 表示 unHiByte = unVal/(2^8) (将 unVal 除以 8 倍)
【讨论】:
稍微澄清一下>> 1表示除以2一次。答案的第一部分使它看起来像 >> 8 意味着除以 2 一次。 +1 知道了..非常感谢 @fayyazkl 对此感到抱歉,也许这只是我解释的不好的方式。哈哈 @LekshmiGopikrishnan 没有问题! :) 如果它是你想要的,请接受答案。 :) @CodingBird 这绝不是个问题。我们都只是合作互相帮助。这个概念是对的。我只是建议改进措辞,可能会造成混淆。【参考方案2】:不涉及移位运算符本身(因为已经回答了),这里假设 unVal 是一个高字节(高 8 位)和低字节(低 8 位)的两字节变量。目的是获得仅由高 8 位产生的值并丢弃低位。
虽然应该通过任何书籍/教程很容易地学习班次运算符,这可能是一些人对这个问题投反对票的原因。
【讨论】:
OK 所以 unHiByte = unVal 不完全是。不过这个概念是对的。但问题是当你将一些东西向左移动时,它会在低字节中附加 8 个零并将低字节提升为高字节。仅获取低位,&它将只有最右边 8 位的掩码为 1,即 unVal & 255。 知道了..非常感谢【参考方案3】:The >>
is a bitwise right shift.
它对位进行操作。用unHiByte = unVal >> 8;
当unVal=250
。
Its binary form is 11111010
右移意味着将位向右移动。因此,当您将1111 1010
向右移动 8 位时,您将得到0000 0000
。
注意:通过将>>
左边的数字除以2^(>>
右边的数字)可以很容易地确定右移运算结果
所以,250/2
8= 0
【讨论】:
【参考方案4】:互联网上没有一个人能够以简单的方式描述这个简单的东西,所有人都只是抛出它的定义而不是应用程序为什么要使用它。这是理解。
例如:如果你有一个十六进制的 0x2A63 并且你想取出 2A 或者你想从中取出 63,那么你会这样做。
例如仅供参考,如果我们将 2A63 转换为二进制,即:0010101001100011。(即 16 位)(前 8 位是 2A,第二位是 63) 问题是二进制总是从右开始。 所以我们必须将前 8 位 (2A) 推到右侧才能得到它。
第 1 行:uint16_t 十六进制 = 0x2A63;
Line 2: uint8_t part2A = (uint8_t)(hex >> 8) // 推送第一个 //向右八位(2A)和(63)不碍事。现在我们有 0000000000101010
// 现在第 2 行为我们返回最后 8 位 (2A) 的 0x2A。
第 3 行:// 要获得 63,我们将这样做:
uint8_t part63 = (uint8_t)hex; // 默认情况下,63 在二进制文件的最右侧。
就这么简单。
【讨论】:
以上是关于hibyte = Value >> 8 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章