linux下C语言类型转换char与int

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

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

阅读 3.6k
3 个回答

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题