以表格形式编写代码:
int i = 0xFF;
并且知道我的系统int类型有4个字节,是否有一种标准方法可以预测这些丢失的位将如何填充到i变量中,即它将始终填充为:
的 0xFFFFFFFF的
或
的 0xFF000000
也就是说,上面的例子涉及的事实是,我们可以预测其余的比特是用0还是1来填充?
另一个问题是,有没有办法知道它是在后面还是从前面填充:
0xFF000000 //<< - 在后面填充的位
或
0x000000FF //<< - 从前面填充的位
答案 0 :(得分:2)
其余位将为0,始终。存储到内存时,这将表示为FF 00 00 00
或00 00 00 FF
- 这取决于计算机的字节顺序。
第一个是小端, - FF 00 00 00
并且通常被英特尔机器使用,但正如 Toby Speight 的评论所指出的那样, IA-64架构可以配置为使用任一布局。
第二个例子是big-endian。 - 00 00 00 FF
答案 1 :(得分:2)
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