【问题标题】:What does least significant byte mean?最低有效字节是什么意思?
【发布时间】:2013-05-14 04:49:41
【问题描述】:

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

char &bitter;

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

void writeThisByte(int sumInt);

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

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

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

strobj.write(&bitter, 1);

我不确定:(

【问题讨论】:

  • 我编辑了你的代码,因为我认为有两个错误('less Significant byte'和'void riteThi',我还更新了代码的格式。如果你发现它不合适,你可以回滚。顺便说一句,'Ieysu' 中没有 a 吗?
  • 首先,感谢您编辑我的代码……其次,“仪式”是故意完成的(即为上课;)……第三,哈哈!是的,假设有一个 :)..关于它的长篇故事,我不会进入

标签: c++


【解决方案1】:

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

011101010101010101010101010110110
                         ^^^^^^^^

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

如果你用十进制的例子可能更容易理解:给定数字 291023,'3' 是最低有效数字,因为如果你改变它,你对整体数字的影响最小。

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

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

效果是这样的:

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

【讨论】:

  • & 255 会不会再次以 x 结尾?
  • @TokugawaIeysu 拿一张纸,用手做。你会看到会发生什么。
  • @Tony:感谢您展示示例! Anthon的解释和你的例子让我更好地理解!
  • 这是一个很好的解释方式。我喜欢这个,我投赞成票!
【解决方案2】:

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

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

int LSB = (someInteger & 0xFF);

【讨论】:

    【解决方案3】:

    int 的更重要位是对其价值贡献更大的位。最低有效位的贡献较小。您通常可以通过将整数与255(一个包含所有1s 的字节)进行与整数运算来获得这些

    int lsb;
    lsb = SumInt & 255;
    

    【讨论】:

    • 如果你和它,你不会再次以 lsb = SumInt 结尾吗?
    • 仅当 SumInt 的值小于或等于 255 且大于 -1 时(假设最高有效位表示大多数现代处理器上的符号)。
    【解决方案4】:
    • 当您查看一个十进制数(例如 507)时,最不重要的位将是 7。将其更改为 6 或 8 会使总数字的变化小于改变 5.

    • 当您查看日期时,例如 2013 年 5 月 14 日最不重要的部分是按时间顺序排列的第 (14) 天。

    • 当您查看一个无符号的 32 位 int(4 个字节)时,其中整数的值是 (256^3)*b3 + (256^2)*b2 + 256*b1 + b0 对于 4 个字节 b0, b1, b2, b3最低有效字节是字节b0

    您可以按照其他人的建议通过 char c = sumInt & 0xFF; 从您的 int sumInt 中获取最低有效字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 2016-01-27
      • 2014-02-23
      • 1970-01-01
      • 2015-07-23
      • 2021-03-09
      • 2011-04-30
      相关资源
      最近更新 更多