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 = 250unHiByte 的价值是多少??

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

提前谢谢..

【问题讨论】:

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 &gt;&gt; is a bitwise right shift.

它对位进行操作。用unHiByte = unVal &gt;&gt; 8;unVal=250

Its binary form is 11111010

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

注意:通过将&gt;&gt;左边的数字除以2^(&gt;&gt;右边的数字)可以很容易地确定右移运算结果

所以,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 在二进制文件的最右侧。

就这么简单。

【讨论】:

以上是关于hibyte = Value >> 8 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

2017.8.1 logstash基础语法学习

htonl()函数详解

大数据系列在hadoop2.8.0下配置SecondaryNameNode

foreach 循环的应用传值

读取二进制转换为字符串

Hadoop2.8.4安装&MapReduce基础