深入理解计算机系统(第三版) 练习题2.21
本帖最后由 哈拉5897 于 2016-12-5 15:24 编辑假设在采用补码运算的32位机器上对这些表达式求值,描述强制类型转换和关系运算的结果
-2147483647-1u<2147483647 这个答案为0,
-2147483647-1u<-2147483647 这个答案为1,
为什么啊...2147483647的补码不是2147483647吗?为什么-2147483647-1u<2147483647u结果是0啊?
还有我调试-2147483647-1u<-2147483647的时候看到,为什么2147483648<2147483647结果又为1了啊? 本帖最后由 哈拉5897 于 2016-12-5 14:36 编辑
这样又可以解释第二个问题了...有点晕... 但是书上说,当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数,并假设这两个数是非负的,来执行这个运算.
所以其它的都能按这个说法解释通,只有-2147483647-1u<2147483647 这个答案为0,不知道怎么解释....{:10_266:}{:10_266:} 本帖最后由 哈拉5897 于 2016-12-5 15:19 编辑
一个是10000000000000000000一个是011111111111111111....好吧
但是为什么-2147483647-1u<2147483647u结果是0啊...是我哪里没理解对吗...还是说这种情况是比较特殊的? 哈拉5897 发表于 2016-12-5 14:58
一个是10000000000000000000一个是011111111111111111....好吧
但是为什么-2147483647-1u
1. -2147483647-1u<2147483647 这个答案为0,
2. -2147483647-1u<-2147483647 这个答案为1,
int跟unsigned int比大小,默认会全转为unsigned int,所以
item 1: 0x10000000-1(0x01111111)会等于2147483647(0x01111111)
item 2: 0x10000000-1(0x01111111)<-2147483647(0x10000000)
所以item 1为0、item 2为1 {:9_219:} {:5_91:} {:10_249:}{:10_249:}{:10_249:} 学习学习 楼主问题解决了吗? {:9_241:} 这是c语言吗 {:10_256:} 学习一个 {:10_279:}{:10_279:}{:10_279:} 感谢楼主,刚好在做csapp的课后练习题,没看懂他书上的案例看了你的代码稍微理解一点点了{:10_256:}
页:
[1]