0
char c = -1;
printf("c = %d\n", c);

上述两行简单的代码,在本机电脑上编译打印的结果是-1,但是经过交叉编译后,移植到板子上运行打印出255,请教一下这个是为什么呀?

mark 60
2 天前提问
3 个回答
0

可能是板子的编译器是把char当成无符号数对待的

0

这个和编译器相关,不同的编译器会把 char 当成 signed char 或者 unsigned char

0

char是8位二进制的数,-1根据最高位是符号位1,最低位为1,其余为0可以表示为10000001,计算机中用补码来表示(按位取反再加1)为(01111110+1)01111111。交叉编译后可能当做无符号数看待则为正数255。关于为何计算机用补码可以参考这里

撰写答案

推广链接