【发布时间】:2018-03-07 02:39:54
【问题描述】:
我被赋予了十六进制数 0xAA,并被告知按顺序对其执行以下操作:
右移 3 和 0x18 左移 2
以下是我执行此操作的步骤:
1.) 用二进制表示 0xAA
0xAA = 1010 1010
2.) 右移 3
0001 0101
3.) 用二进制表示 0x18
0x18 = 0001 1000
4.) 执行 0001 0101 和 0001 1000
0001 0101 & 0001 1000 = 0001 0000
5.) 左移 2
0100 0000
这是我的最终答案,0100 0000。但是,我被告知我应该得到的答案是 0111。我不知道我哪里出错了,或者我应该如何得到这个答案。我希望有人能告诉我哪里出错了。非常感谢大家。
【问题讨论】:
-
我为我帖子中的格式道歉,我必须执行的操作是:1.) 右移 3 2.) 和 0x18 3.) 左移 2
-
如果这是所有给定的信息:你的结果是正确的。
-
对于给定的步骤,您的答案对我来说是正确的。但是,如果执行这些操作,我会得到
0111b:(0xAA >> 3 | 0x18) >> 2... 也许告诉你0111b的人打算这样做?如果您在 8 位寄存器中对0xAA进行符号扩展或循环而不是移位,您甚至无法获得0111b! (另外,在左移两次之后,你永远不会有任何以11b结尾的东西,所以肯定有问题。 -
这是所有给定的信息,谢谢 Joshua,感谢您的帮助
-
lungi,如果我理解正确,如果你在最后一步右移 2 而不是左移 2,你会得到 0111。我的理解会让我相信这些步骤会导致0100,你为什么要填写右边的?
标签: binary hex bit-manipulation bit-shift bitwise-and