《兩個常見位操作面試題不用加減乘除運算子計算兩數之和及a=b*3》
歡迎關注微博: (
)介紹了:
一.位操作基礎,用一張表描述位操作符的應用規則並詳細解釋。
二.常用位操作小技巧,有判斷奇偶、交換兩數、變換符號、求絕對值。
三.位操作與空間壓縮,針對篩素數進行空間壓縮。
四.位操作的趣味應用,列舉了位操作在高低位交換、二進位制逆序、二進位制中1的個數以及缺失的數字這4種趣味應用。
現在再來介紹兩個位操作習題,這兩個習題也常常在各大it公司的筆試題面試題中出現。
1.不用加減乘除運算子計算兩個數字之和
2.不用加減乘除運算子計算a = b * 3
首先這兩個題目其實是很相關的,要計算
a = b * 3就是計算a = b *2 + b即a = b << 1 + b。
因此只要解決了不用加減乘除運算子計算兩個數字之和,那麼不用加減乘除運算子計算a = b * 3也就迎刃而解了。那麼怎麼不用加減乘除運算子計算兩個數字之和了?我們知道在計算5 + 9時,首先不進製的話5 + 9 = 4,5 + 9的進製為1,然後和就是1 * 10 + 4 = 14。同理放到二進位制中也可以採用這樣的方法。
運算步驟如下://by morewindows( )
設有a = 3,b = 6。 a
0011
b0110
不進製和0101 = 5
進製0010 = 2
因此a + b就變成了5 + 2 << 1
然後有
50101
2<<1
0100
不進製和0001 = 1
進製0100 = 4
因此a + b就變成了1 + 4 << 1
然後有
10001
4<<1
1000
不進製和1001 = 9
進製0000 = 0
當時進製為0時,不進製和為9即a + b之和。
**不難寫出:
[cpp]view plain
copy
//兩個常見位操作面試題 不用加減乘除運算子計算兩數之和及a=b*3
////by morewindows( )
#include
#include
#include
intbitadd(
inta,
intb)
intbitmultiplication3(
inta)
intmain()
執行結果如下所示:
《兩個常見位操作面試題不用加減乘除運算子計算兩數之和及a=b*3》
歡迎關注微博:
Js 運算子 加減乘除
1.加法 var box 1 2 3 var box 1 nan nan,有乙個為nan就為nan var box infinity infinity infinity var box infinity infinity infinity var box infinity infinity nan,...
不用加減乘除做運算
1 乙個數擴大n倍 直接用移位,擴大n倍相當於是原來的 n 1 倍,例擴大7倍,則是原來的8倍,那就左移3位 2 不使用新的變數,交換兩個變數的值 用異或運算 a a b b a b a a b 3 求兩個整數之和 對數字做運算,除了四則運算之外,也 就只剩下位運算了。位運算是針對二進位制的,我們就...
位運算子實現加減乘除
要用位運算來實現四則運算,不僅僅要知道 怎麼做,還需要先掌握位運算的幾個運算規律 1 n n 1 比如 3 4 2 獲取整數n的二進位制串中最後乙個1 n n n 1 n 3 去掉整數n的二進位制串中最後乙個1 n n 1 然後,我們就可以使用常規位運算並結合上面的運算規律來實現四則運算了。加法 a...