c语言中int x=1,unsigned int y=2,(x-y)/2结果为什么是32767而

是-0.5?

首先,C语言里面的整数相除的结果都是去尾的, 比如3/2等于1,4/3等于1,13/5等于2,就是只保留算术运算的整数部分。
其次,结果为什么会是32767,这个就有问题了,因为按这个结果推算,-1的无符号表示结果是65535,也就是2的16次方减1,也就是说unsigned int的大小只有两个字节??这个是在什么平台上跑的??正常unsinged int大小是四个字节,也就是结果保存为无符号型也应该是2147483647,不可能是32767。追问

我是看书上例题的,它说无符号整数与有符号整数所表示范围不一样

追答

我不是说了么。。。
按照你给的数据,习题中就是把int和unsigned int都当做两个字节,那int范围就是-32768~32767,unsigned int范围就是0~65535。
但是事实上,绝大多数情况,int和unsigned int都是四个字节的。
建议你理解题目的意思就行了——int转化为unsigned int后取值范围发生了变化,另外就是int相除,只取整数部分,就行了。

这个习题肯定是错的!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-23
int - unsigned int = unsigned int
结果是32767 你以什么形式输出 你用的那个版本的编译器?