假设在一个32位little endian 的机器上运行下面的程序,结果是多少 ?
#include <stdio.h>
int main()
{
long long a = 1, b = 2, c = 3;
printf("%lld %lld %lld\n", a, b, c); // 1 2 3
printf("%d %d %d %d %d %d\n", a, b, c); // 1 0 2 0 3 0
return 0;
}
#include <stdio.h>
int main()
{
long long a = -2;
printf("%lld\n", a); //-2
printf("%d %d\n", a); //-2 -1
return 0;
}
-2: 原码反码补码
1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1101
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110
小端存储
1110 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
分成两部分
第一部分的正常形式1111 1111 1111 1111 1111 1111 1111 1110
原码:
1111 1111 1111 1111 1111 1111 1111 1101
1000 0000 0000 0000 0000 0000 0000 0010 ==> -2
第二部分的正常形式1111 1111 1111 1111 1111 1111 1111 1111
原码:
1111 1111 1111 1111 1111 1111 1111 1110
1000 0000 0000 0000 0000 0000 0000 0001 ==> -1
所以输出为-1