哈拉5897 发表于 2016-12-5 14:05:17

深入理解计算机系统(第三版) 练习题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:32:02

本帖最后由 哈拉5897 于 2016-12-5 14:36 编辑

这样又可以解释第二个问题了...有点晕...

哈拉5897 发表于 2016-12-5 14:44:42

但是书上说,当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数,并假设这两个数是非负的,来执行这个运算.

所以其它的都能按这个说法解释通,只有-2147483647-1u<2147483647 这个答案为0,不知道怎么解释....{:10_266:}{:10_266:}

哈拉5897 发表于 2016-12-5 14:58:39

本帖最后由 哈拉5897 于 2016-12-5 15:19 编辑

一个是10000000000000000000一个是011111111111111111....好吧
但是为什么-2147483647-1u<2147483647u结果是0啊...是我哪里没理解对吗...还是说这种情况是比较特殊的?

呆鸭 发表于 2016-12-5 17:16:37

哈拉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

whdd 发表于 2018-9-16 12:10:26

{:9_219:}

whdd 发表于 2018-9-16 12:11:12

{:5_91:}

钱闻韬 发表于 2018-9-18 13:15:59

{:10_249:}{:10_249:}{:10_249:}

学学看看 发表于 2018-11-30 14:13:15

X用户 发表于 2018-12-22 15:48:51

学习学习

majian890324 发表于 2020-5-2 12:37:42

楼主问题解决了吗?

心驰神往 发表于 2020-10-30 15:22:12

{:9_241:}

kkl44stupid 发表于 2021-2-10 13:10:28

这是c语言吗

kkl44stupid 发表于 2021-2-16 17:55:59

{:10_256:}

ridiculum 发表于 2021-6-16 17:27:36

学习一个

ridiculum 发表于 2021-6-16 17:35:41

{:10_279:}{:10_279:}{:10_279:}

TerryWu 发表于 2022-10-10 22:14:33

感谢楼主,刚好在做csapp的课后练习题,没看懂他书上的案例看了你的代码稍微理解一点点了{:10_256:}
页: [1]
查看完整版本: 深入理解计算机系统(第三版) 练习题2.21