官术网_书友最值得收藏!

3.6 位操作指令

RV64I指令集提供與(and)、或(or)以及異或(xor)等位操作指令,如表3.5所示。

表3.5 位操作指令

異或操作的真值表如下(“^”表示異或)。

0 ^ 0 = 0

0 ^ 1 = 1

1 ^ 0 = 1

1 ^ 1 = 0

從上述真值表可以發(fā)現(xiàn)以下3點。

0異或任何數(shù) = 任何數(shù)。

1異或任何數(shù) = 任何數(shù)取反。

任何數(shù)異或自己都等于0。

利用上述特點,異或操作有如下幾個非常常用的場景。

使某些特定的位翻轉(zhuǎn)。例如,若想把0b1010 0001的第1位和第2位翻轉(zhuǎn),則可以將該數(shù)與0b0000 0110進(jìn)行按位異或運算。

10100001 ^ 00000110 = 10100111

交換兩個數(shù)。例如,要交換a=0b1010 0001和b=0b0000 0110的值,可通過下列語句實現(xiàn)。

        a = a^b;     //a=1010 0111
        b = b^a;     //b=1010 0001
        a = a^b;     //a=0000 0110

在匯編代碼里把變量設(shè)置為0。

xor x1, x1

判斷兩個數(shù)是否相等。

bool is_identical(int a, int b)
{
    return ((a ^ b) == 0);
}
主站蜘蛛池模板: 琼中| 平阴县| 宜都市| 高邮市| 府谷县| 翁牛特旗| 峨边| 广西| 张家港市| 花垣县| 江孜县| 古浪县| 石泉县| 攀枝花市| 化州市| 乐昌市| 赤壁市| 越西县| 广州市| 安远县| 葫芦岛市| 喀喇沁旗| 乳源| 汝阳县| 通化县| 宜都市| 敖汉旗| 尚义县| 防城港市| 溧阳市| 夏河县| 十堰市| 鹰潭市| 易门县| 长岛县| 视频| 织金县| 邢台市| 微山县| 江孜县| 康定县|