#include <stdio.h>
int main()
{
int a;
typedef struct {
int b7 : 1;
int b6 : 1;
int b5 : 1;
int b4 : 1;
int b3 : 1;
int b2 : 1;
int b1 : 1;
int b0 : 1;
} byte;
byte ab0 = {0,0,0,0,0,0,0,1};
a = *(int*)&ab0;
printf("ab0 is %x \n",a);
byte ab1 = {0,0,0,0,0,0,1,0};
a = *(int*)&ab1;
printf("ab1 is %x \n",a);
byte ab2 = {0,0,0,0,0,1,0,0};
a = *(int*)&ab2;
printf("ab2 is %x \n",a);
byte ab3 = {0,0,0,0,1,0,0,0};
a = *(int*)&ab3;
printf("ab3 is %x \n",a);
byte ab4 = {0,0,0,1,0,0,0,0};
a = *(int*)&ab4;
printf("ab4 is %x \n",a);
byte ab5 = {0,0,1,0,0,0,0,0};
a = *(int*)&ab5;
printf("ab5 is %x \n",a);
byte ab6 = {0,1,0,0,0,0,0,0};
a = *(int*)&ab6;
printf("ab6 is %x \n",a);
byte ab7 = {1,0,0,0,0,0,0,0};
a = *(int*)&ab7;
printf("ab7 is %x \n",a);
return 0;
}
编译和运行
gcc -Wall test.c
./a.out
ab0 is 80
ab1 is 40
ab2 is 20
ab3 is 10
ab4 is 8
ab5 is 4
ab6 is 2
ab7 is 1
在线运行代码时输出相同 http://codepad.org/ntqyuixp
我无法理解它的输出。
期望输出: 根据我的理解,输出应该是这样的:
ab0 is 1
ab1 is 2
ab2 is 4
ab3 is 8
ab4 is 10
ab5 is 20
ab6 is 40
ab7 is 80
请告诉我我漏掉了什么。
字节序是否起到任何作用?
代码应该如何编写以实现我的预期行为?
int*
然后解引用的方法是错误的,如果你在生产代码中应用它,会遇到很多麻烦。不要这样做。标准预见的执行此类检查的方法是使用union
。 - Jens Gustedt