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

时间:2013-05-14 04:49:42

标签: c++

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

char &bitter;

在我的标题文件中,我有这个:

void writeThisByte(int sumInt);

指令说我必须写入传递给ostream对象的int的“不太重要的字节”,即strobj;

但是,我对最不重要的字节意味着什么感到困惑。

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

strobj.write(&bitter, 1);

我不确定:(

4 个答案:

答案 0 :(得分:14)

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

011101010101010101010101010110110
                         ^^^^^^^^

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

如果您采用小数示例,可能更容易理解:给定数字291023,“3”是最不重要的数字,因为如果您更改它,则对总数的影响最小。

要获得最低有效字节,只需按位-AND较大的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

答案 1 :(得分:10)

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

要提取最低有效字节,按位-AND数字,其中一个字节的值为1 s,i。即255:

int LSB = (someInteger & 0xFF);

答案 2 :(得分:4)

int的更重要的位是对其值有更大贡献的位。最低有效位贡献较少。您通常可以通过使用255(包含所有1 s的字节)的整数来获取这些值

int lsb;
lsb = SumInt & 255;

答案 3 :(得分:4)

  • 当您查看十进制数字时,例如507,最不重要的数字将是7.将其更改为6或8会改变总数远小于改变5。

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

  • 当您查看无符号的32位int(4个字节)时,其中4个字节(256^3)*b3 + (256^2)*b2 + 256*b1 + b0的整数值为b0, b1, b2, b3最不重要< / em> byte是字节b0

您可以像其他人建议的那样int sumIntchar c = sumInt & 0xFF;获取最不重要的字节。