【问题标题】:right shift arithmetic and hexadecimal numbers右移算术和十六进制数
【发布时间】:2013-10-30 19:40:47
【问题描述】:
set 0x8675309F, %o1
sra %o1, 16, %o1

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

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

如果对十六进制数进行逻辑门 AND 或 XOR 运算,我是否必须转换为二进制数,或者我可以对十六进制数执行逻辑门运算吗?

【问题讨论】:

    标签: assembly hex sparc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      举个例子:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-11
        • 2018-08-27
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多