1
set 0x8675309F, %o1
sra %o1, 16, %o1

有人可以解释一下 sra 应该在这里做什么,我知道这是右移算法,但它在这条指令中到底做了什么。我也知道如何将十六进制数转换为十进制数和从十进制数转换为二进制数,但是有没有更简单的方法来对十六进制数进行逻辑门运算?例如,如果我想 AND 或 OR 或 XOR 两个十六进制数字,我将如何去做?我知道它是如何用二进制完成的,但是有没有办法用十六进制来做到这一点,或者你需要转换成二进制,然后对所述二进制数进行逻辑门操作?

这是我的尝试:答案将是 0x8675,所以这就是我所做的(不确定这是否正确)我将十六进制数转换为十进制数,然后从十进制数转换为二进制数,这是我进行右移操作的地方右移 16 位(或在二进制数前面添加 16 个零),然后我再次转换为十六进制。问题是要转换回十六进制我必须使用在线转换器并将十进制转换为二进制我还使用了转换器(因为数字非常大),问题是在检查任何类型时我都不会能够使用在线转换器,那么解决此类问题的最快方法是什么?

对十六进制数进行逻辑门 AND 或 XOR 运算怎么样,我是否必须转换为二进制数,或者无论如何我可以对十六进制数执行逻辑门运算?

4

2 回答 2

3

十六进制是数字的文本格式,而不是数字本身的属性。因此,十六进制与您可能想要对数字执行的任何机器操作的含义无关。

算术右移是一种右移,如果设置了最高有效位(否则为零),则将 1 移入空出的高位。这具有保留数量符号的效果。

于 2013-10-22T05:29:22.627 回答
1

您是否使用二进制或十六进制或十进制数字格式执行逻辑运算并不重要,因为输出将是相同的。但是,如果您使用十六进制表示,它的优点是您可以比使用 dec 更轻松地读取源代码中的二进制值。原因是,因为 hexadimzmal 的 a bas 是基数 2 的倍数,因此您可以轻松地在十六进制数中直观地识别四位二进制,而在十进制格式中则不那么容易。

举个例子:

 3ab9h   ->   3      A     B     9
             0011  1010  1011  0101

所以Hex中的每个数字都是一个四位二进制,这很容易处理。

于 2013-10-22T07:21:44.703 回答