Possible Duplicate:
C Macro definition to determine big endian or little endian machine?

int main()
{
  int x = 1;

  char *y = (char*)&x;

  printf("%c\n",*y+48);
}

如果它是小端,它将打印1.如果它是大端,它将打印0.对吗?或者,是否将char*设置为int x总是指向最低有效位,而不考虑字符顺序?

推荐答案

简而言之,是的.

假设我们在一台32位机器上.

如果是小端,则内存中的x将类似于:

       higher memory
          ----->
    +----+----+----+----+
    |0x01|0x00|0x00|0x00|
    +----+----+----+----+
    A
    |
   &x

所以是(char*)(&x) == 1,还有*y+48 == '1'.(48是"0"的ASCII代码)

如果它是大端字节序,它将是:

    +----+----+----+----+
    |0x00|0x00|0x00|0x01|
    +----+----+----+----+
    A
    |
   &x

所以这个是'0'美元.

C++相关问答推荐

为什么这个C程序代码会产生以下结果?

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

空指针的运行时强制转换

如何调试LD_PRELOAD库中的构造函数?

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

如何在C中使printf不刷新标准输出?

将数据移动到寄存器时出现分段故障

如何在C语言中正确打印图形

获取每个循环迭代结束时的当前时间

在Linux上使用vscode和lldb调试用Makefile编译的c代码

在函数外部使用内联ASM时无法指定操作数

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

Dlsym()的手册页解决方法仍然容易出错?

C中2个数字的加法 - 简单的人类方法

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

无法在线程内用 C 打印?

C语言程序流程解释

我该如何处理这个 C 90 代码中的内存泄漏?

在 printf() 格式说明符中使用字段宽度变量