每日一題 No 21 a b(位操作符) 正整數

2021-07-30 16:36:00 字數 1053 閱讀 2051

昨天寫了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 ...