計算機中右移一位和除以二的區別

2021-10-21 21:01:02 字數 1250 閱讀 8458

在二分查詢演算法中,我們經常會寫類似int mid = (left + right) / 2的操作,考慮周全一點的會寫成int mid = left + (right - left) / 2形式,更加極客的則會寫為int mid = left + ((right - left) >> 1),逐漸優秀。我們也認為右移的結果就是除以二,沒有什麼區別,今天刷題的過程中,遇到了問題,因為二分中左邊界不是以0開始的,用了右移操作,一直報錯,後來換成除法操作才解決問題。順便就總結下右移和除二的區別,先看一下**:

void

test()

return

;}

迴圈輸入乙個值,然後輸出它的右移一位結果和除以二結果,這是我的測試結果(vs2015):

結果很清晰:

value為非負數或負偶數,移位操作和除法操作結果一致

value為負奇數,移位操作和除法操作趨向不同

正常除法:

-5/

2=-(

int)

2.5=-2

// 由於型別轉換發生截斷

負奇數的右移一位:首先,我們需要知道計算機中的數是按補碼存放的,正數的補碼和原始碼一致,負數的補碼為原始碼取反再加1,還有前面的符號位,例如(為了簡單,用4個bit存放乙個小整數):

5

// 原始碼:0101 補碼:0101-5

// 原始碼:1101 補碼:1011 注:符號位不參與變換

然後來看負奇數的右移操作:

-

51011

->

1101

// 1101 也是補碼,對應的負數為 -3

也就是說,-5右移一位後並不是取到了-2,而是取到了-3,其它負奇數同理。再來看負偶數:

-

6// 原始碼:1110 補碼:1010

// 進行右移一位操作:-6

1010

->

1101

// 對應的負數為 -3

可以看到,負偶數移位沒有問題

計算機 中的位 位元組和字

術語 位 位元組 字用於描述計算機資料單位或機儲存單位。這裡主要指儲存單位。位是計算機中儲存的基本單位。最小的儲存單位是位。可以容納兩個值0或1中的乙個 或者稱為該位置被置為關或開 不能在乙個位中儲存更多的資訊。位元組是計算機常用的儲存單位。幾乎對所有的機器,乙個位元組均為8位。由於每個位或是0,或...

關於計算機中的位 位元組和字的介紹。(計算機基礎)

位 子節和字是描述計算機資料單元或儲存單元的術語。這裡主要指儲存單元 最小的儲存單元是位 bit 可以儲存0或1 或者說,位用於設定 開 或 關 雖然1位儲存的資訊有限,但是計算中位的數量十分龐大。位是計算機記憶體的基本模組。位元組 byte 是常用的計算機儲存單位。對於幾乎所有的機器,1位元組均為...

計算機中的位操作 補碼 反碼 原碼

計算機中的符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分。在計算機中,數值一律用補碼來表示和儲存。原因在於,使用補碼可以將符號位和數值域同一處理 同時,加法和減法也可以統一處理。此外補碼和原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。基本原理 1.乙個負數 ...