昨天寫了2個數相乘,今天讓我們來用位操作符寫2個正整數相除吧,給定2個數a,b,計算a/b,並輸出商和餘數
a ba/b的商 a/b的餘數
155 152
1 3具體的看這裡,我覺得寫得特別好,反正我是看這個寫出來的~
計算機數值中的乘法除法
以下是我個人對上面這個鏈結的理解,並根據理解寫出的**。
我們算二個數相除的時候,就拿最簡單的5/3來說
5比3大,那我們怎麼現實中是怎麼得出5/3得1,餘2的?
是不是因為5-3 = 2
2 < 3 所以,我們只減了一次,那麼商就是1,餘數就是2。
根據這個原理,我們可以算53/3
我們先得出5/3 是不是得1,餘2
接著得出23(2*10+3),相應的,我們也要得到商10(1*10)
我們來算23/3。
是不是減去7個3,餘2。
那麼商就是10+7 ,餘2
我們最後得到商17,餘2;
在位運算裡,當前位與相鄰位只相差2倍,如果前面的比它後面的一位大,那麼肯定就是商1,餘x
我們在將商*2,餘數*2,加起來。
就是將10進製的除法,轉為了2進製。
根據以上原理來寫,就很簡單了~
#include
using
namespace
std;
int add(int a, int b)
int s = a ^ b;
int c = (a & b) << 1;
return add(s, c);
}int del(int a, int b)
int getbitsize(int a)
return i;
}bool getleftbit(int a, int size, int n)
return a & 1;
}pair divide(int a, int b)
i++;
}return p;
} int main()
每日一題 No 20 a b(位操作符) 正負數
昨天寫了2個正數相乘,今天讓我們來用位操作符寫2個正負數相乘吧,給定2個數a,b,計算a b a ba b的值 155 152 23560 負數乘法跟正數乘法運算一樣。我們只需要把負數變成正數並且記錄哪個是負數,最後根據這個二個數是否是負數的情況來判斷r是否為負數。include using nam...
2 1 常用位操作符
預備知識 什麼是位?還記得吧,乙個位元組是八位,所謂的一位就是乙個二進位制位,也就是說每一位可以存放乙個二進位制數0或1。1.位與 1 位與符號是 按照乙個數的二進位制位按位與。2 位與的真值表 1 1 1,1 0 0,0 1 0,0 0 0.好,那我們來舉個例子 兩個二進位制數分別是 101010...
2 1 C語言之位操作符
c語言中,位操作一共有6個位操作符,分別是位與 and 位或 or 位取反 一元運算子 位異或 xor 左移位 右移位 2.1.1位與 1 位與操作符 邏輯與操作符 兩者不同。位與是按位進行與操作,只有0或者1這兩個運算元 邏輯與運算元是只要不是0的,都為1,邏輯與是兩個運算元作為整體來相與的。2 ...