问题描述
我在处理这个特定操作时遇到了一些麻烦-0x44 >> 3
其中 >> 是算术右移运算符。
现在,我所指的教科书给出的答案是1110 1000
但是,我是这样做的-0x44
=> 0100 0100
现在,由于第一位为零,我将算术右移的结果计算为 0000 1000
(十六进制值 0x08)
但是,这本书给出的答案是1110 1000
(十六进制值0xE9
)
我在这里做错了什么?
(本书为CS:APP,有兴趣者练习2.16题)
解决方法
据我所知,这是 Computer Science: A Programmer's Perspective(第 3 版)的 global edition 练习题 2.16,根据原作者的说法,它充满了错误。
直接引用errata page:
全球版注意事项:不幸的是,出版商安排了一套不同的练习和作业的生成 全球版的问题。做这件事的人并没有做得很好 干得好,所以这些问题及其解决方案有很多错误。 我们尚未为此版本创建勘误表。
如果您对练习和家庭作业问题感兴趣,网上的建议似乎是选择北美版。
你的答案确实是正确的:
0x44 >> 3 == 0x08