疯狼2013 发表于 2014-3-19 14:56:09

这道还是没想明白

main()
{
      char x = 0xffff;
      printf( "%d\n", x-- );
}
为什么运行结果是 -1

超级忍者龟 发表于 2014-3-19 14:56:10

char x范围是-128 ~ 127之间,赋值0xffff编译器会自动截断高8位,变成x = 0xFF
带符号的二进制1 0 0 0 0 0 0 0为-0(负0),减1的话,高位逐个借位,变成1 1 1 1 1 1 1 1(0xFF,问题中的x值得),而-0减1等于-1

花開丶若相惜ソ 发表于 2014-3-19 15:24:00

0xffff=-1。。。
x--=-1
x=-2

machimilk 发表于 2014-3-19 21:54:46

char 1字节 范围是-128到127
如果是 无符号char 范围就是0-255
你ff已经是-1了

月光、茉莉雅 发表于 2014-3-20 17:35:47

超级忍者龟 发表于 2014-3-19 16:15 static/image/common/back.gif
char x范围是-128 ~ 127之间,赋值0xffff编译器会自动截断高8位,变成x = 0xFF
带符号的二进制1 0 0 0 0 0 ...

{:7_168:}给力,学习了这句话了

疯狼2013 发表于 2014-3-25 08:42:46

月光、茉莉雅 发表于 2014-3-20 17:35
给力,学习了这句话了

明白了谢谢

hanhaochi 发表于 2014-4-1 16:36:03

二楼答案最正确,只不过没给分析罢了……
页: [1]
查看完整版本: 这道还是没想明白