位和字节填充

时间:2015-10-19 08:55:46

标签: c++ bit

以表格形式编写代码:

int i = 0xFF;

并且知道我的系统int类型有4个字节,是否有一种标准方法可以预测这些丢失的位将如何填充到i变量中,即它将始终填充为:
0xFFFFFFFF的

0xFF000000
也就是说,上面的例子涉及的事实是,我们可以预测其余的比特是用0还是1来填充?

另一个问题是,有没有办法知道它是在后面还是从前面填充:
0xFF000000 //<< - 在后面填充的位 或
0x000000FF //<< - 从前面填充的位

3 个答案:

答案 0 :(得分:2)

其余位将为0,始终。存储到内存时,这将表示为FF 00 00 0000 00 00 FF - 这取决于计算机的字节顺序。

第一个是小端, - FF 00 00 00并且通常被英特尔机器使用,但正如 Toby Speight 的评论所指出的那样, IA-64架构可以配置为使用任一布局。

第二个例子是big-endian。 - 00 00 00 FF

答案 1 :(得分:2)

带有4字节整数的

int i = 0xFF;用FF填充1个字节,另外3个用00填充。

另一方面,

char i = 0xFF;(使用1字节字符)用FF填充1个字节,并且您没有保证接下来的3个字节是什么(既不是它们的值,也不是它们用于其他变量等。或不)。

字节方向

FF 00 00 00
00 00 00 FF

被称为" endianess"您的CPU(以及它们匹配的操作系统,编译器等)。 "正常"今天的计算机是" little-endian",即FF 00 00 00,在手机等设备中存在big-endian。 但是,您不会直接在程序中注意到endianess:如果将int与此值进行比较,它将等于00 00 00 FF,这在数学上是正确的(或者在另一个方向上说:当您写入时在源文件中000000FF,编译器对其进行更改,实际上您将int值与FF 00 00 00进行比较)。获得真实的"表示,转换为字节/字符指针并单独访问4个字节是必要的。

答案 2 :(得分:0)

int i = 0xFF;

相当于

int i = 255;

哪些位相当于

0x000000FF