【问题标题】:What does hibyte = Value >> 8 meaning?hibyte = Value >> 8 是什么意思?
【发布时间】:2013-10-03 07:32:17
【问题描述】:

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

unHiByte = unVal >> 8;

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

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

提前谢谢..

【问题讨论】:

标签: c visual-c++ mfc


【解决方案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/28= 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 在二进制文件的最右侧。

    就这么简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多