位操作實現加減乘除四則運算

2022-02-02 23:03:01 字數 2573 閱讀 7669

如何使用位操作分別實現整數的加減乘除四種運算?

需要熟練掌握一些常見功能的位操作實現,具體為:

<1> 常用的等式:-n = ~(n-1) = ~n+1

<2> 獲取整數n的二進位制中最後乙個1:n&(-n) 或者 n&~(n-1),如:n=010100,則-n=101100,n&(-n)=000100

<3> 去掉整數n的二進位制中最後乙個1:n&(n-1),如:n=010100,n-1=010011,n&(n-1)=010000

(1) 加法實現

可以很容易地用「異或」和「或」操作實現整數加法運算:對應位數的「異或操作」可得到該位的數值,對應位的「與操作」可得到該位產生的高位進製,如:a=010010,b=100111,計算步驟如下:

第一輪:a^b=110101,(a&b)<<1=000100, 由於進製(000100)大於0,則進入下一輪計算,a=110101,b=000100,a^b=110001,(a&b)<< 1=001000,由於進製大於0,則進入下一輪計算:a=110001,b=001000,a^b=111001,(a&b)<< 1=0,進製為0,終止,計算結果為:111001。

**如下:12

3456

78910

intadd(inta,intb)while(carry != 0);

returnadd;

}

(2) 減法實現

減法可很容易地轉化為加法:a - b = a + (-b) = a + (~b + 1 )

**如下:12

3intsubtract(inta,intb)

(3) 乘法實現

先看乙個例項:1011*1010:12

3456

71011

* 1010

----------

10110 < 左移一位,乘以0010

+ 1011000 < 左移3位,乘以1000

----------

1101110

因而乘法可以通過系列移位和加法完成。最後乙個1可通過b&~(b-1)求得,可通過b& (b-1)去掉,為了高效地得到左移的位數,可提前計算乙個map,**如下:12

3456

78910

1112

1314

1516

17intmultiply(inta,intb)

if(neg)

sum = -sum;

returnsum;

}

(4) 除法實現

乘法可很容易轉化為減法操作,主要思想與乘法實現類似,**如下:12

位操作實現加減乘除四則運算

題目描述 如何使用位操作分別實現整數的加減乘除四種運算?解決方案 需要熟練掌握一些常見功能的位操作實現,具體為 1 常用的等式 n n 1 n 1 2 獲取整數n的二進位制中最後乙個1 n n 或者 n n 1 如 n 010100,則 n 101100,n n 000100 3 去掉整數n的二進位...

位運算實現加減乘除四則運算

只用邏輯運算實現加法 int add int a,int b int sumtemp a b int carry a b 1 return add 只用邏輯運算實現減法 int minus int a,int b 邏輯運算實現除法 低效 int div int a,int b return resu...

位運算實現加減乘除四則運算

目錄加法 減法 乘法 除法計算機最基本的操作單元是位元組 byte 乙個位元組由8個位 bit 組成,乙個位只能儲存乙個0或1,其實也就是高低電平。無論多麼複雜的邏輯 龐大的資料 酷炫的介面,最終體現在計算機最底層都只是對0101的儲存和運算。不考慮進製情況下,位的異或運算跟求 和 的結果一致 異或...