最低有效字节是什么意思



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

char &bitter;

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

void writeThisByte(int sumInt);

指令说我必须将传递给ostream对象的int的"低有效字节"写入,即strobj;

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

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

strobj.write(&bitter, 1);

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

011101010101010101010101010110110
                         ^^^^^^^^

最不重要的字节是右边的8位。

举一个十进制的例子可能更容易理解:给定数字291023,"3"是最低有效的十进制数字,因为如果你改变它,你对整个数字的影响最小。在二进制中,我们处理二进制数字(缩写为"bits"),一个字节被定义为8位,但这个概念仍然成立。

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

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

(您也可以将结果存储在更宽的类型中,如int,或std::bytestd::uint8_t)。

位与操作是这样工作的,只有当两个输入都是1时才产生1 s:

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

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

提取最不重要的字节,按位与1 s的一个字节值,即255:

int LSB = (someInteger & 0xFF);

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

int lsb;
lsb = SumInt & 255;
  • 当您查看十进制数时,例如507,最不有效的数字将是7。

  • 将其更改为6或8将比更改为5对整体数字的影响小得多。
  • 当您查看日期时,例如 2013年5月14日最不重要的部分是按时间顺序排列的日期(14)。

  • 当您查看一个unsigned 32位int(4字节)时,其中4字节b0, b1, b2, b3的整数值为(256^3)*b3 + (256^2)*b2 + 256*b1 + b0最不重要的字节是b0

您可以通过执行char c = sumInt & 0xFF;int sumInt中获得最低有效字节,正如其他人所建议的。

相关内容

最新更新