【问题标题】:using bit-wise operation to invert only the MSB of a binary number使用按位运算仅反转二进制数的 MSB
【发布时间】:2013-05-23 05:46:19
【问题描述】:

鉴于 MSB 已设置,我正在尝试找出一种仅反转二进制数的 MSB 并保持其他位不变的最佳方法。

例如,如果一个二进制数是 1111

我试过了,只有ax的前半部分是啊,带00b

and ah, 00b

我得到 0011,正如你所见,当我这样做时,MSB 旁边的位也发生了变化

我应该如何只更改最高位而不更改其他位?

提前致谢

【问题讨论】:

    标签: assembly x86 bitwise-operators masking


    【解决方案1】:

    首先,您的AND 并没有真正反转任何位;它清除它们。

    如果你想反转AX 的最高位,你可以这样做:

    XOR AX,8000h
    

    或者对于最重要的半字节:

    XOR AX,0F000h
    

    或最高有效字节:

    XOR AX,0FF00h
    

    等等。

    【讨论】:

    • 请问我们为什么用8000h?
    • 8000h1000000000000000b。用十六进制写位掩码比用二进制(或十进制)写更方便。
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多