最低有效字节是什么意思?

新手上路,请多包涵

我必须实现一个将字节写入 ostream 对象的方法。让我们称之为 ostream 对象 strobj 。我还有一个用于存储一个字节数据的位缓冲区,我们称之为:

 char &bitter;

在我的头文件中,我有这个:

 void writeThisByte(int sumInt);

说明说我必须将传入的 int 的“次要字节”写入 ostream 对象,即 strobj

但是,我对最低有效字节的确切含义感到困惑。

这是否意味着您正在检查是否 sumInt == 1 ?如果是的话,你会这样写到 ostream 吗?

 strobj.write(&bitter, 1);

我不确定 :(

原文由 Pangu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 658
2 个回答

想象一个 32 位整数,其中每个位可以是 0 或 1,例如:

 011101010101010101010101010110110
                         ^^^^^^^^

最低有效字节是右侧的 8 位。

如果你举一个十进制的例子可能更容易理解:给定数字 291023,’3’ 是最不重要的十进制数字,因为如果你改变它,你对总数的影响最小。在二进制中,我们处理二进制数字(缩写为“位”),一个字节定义为8位,但概念成立。

要获得最低有效字节,只需按位和较大的 int 十六进制 0xFF 或十进制 255 (1+2+4+8+16+32+64+128=255) - 这将清除所有更重要的位并保留 8 个最低有效位…

 int x = ...whatever...;
unsigned char least_significant_bits = x & 255;

(您也可以将结果存储在更广泛的类型中,例如 intstd::bytestd::uint8_t )。

按位与操作的工作方式如下,仅当两个输入均为 1 1

 011101010101010101010101010110110 // x
000000000000000000000000011111111  //255
result:
000000000000000000000000010110110 // x & 255

原文由 Tony Delroy 发布,翻译遵循 CC BY-SA 4.0 许可协议

您的 int 包含几个字节(很可能是 2、4 或 8 个字节)。与最低有效位的概念类似,最低有效字节是整个整数值中权重较小的字节。根据系统的字节顺序,它可能是内存的第一个或最后一个字节。

要提取最低有效字节,按位与具有一个字节价值的数字 1 s,即 255:

 int LSB = (someInteger & 0xFF);

原文由 user529758 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏