兩二進位制數每bit上迴圈取異或 與運算來實現相加,如何證明迴圈次數是有限的?

時間 2021-05-31 09:41:27

1樓:wzj

先看最低位的相加過程,

第一次迭代後same最低位是0,diff和same最低位在之後的迭代中不會再改變(與0做異或的數保持不變)

第一次迭代後same次低位若為1,必能在有限次迭代後變0,此後diff次低位便不會再變

更高位同理,b最終隨same,必定為0,固迴圈可在有限步結束

2樓:靈劍

首先每一步結束後a+b的結果都保持不變,而且a和b都是非負整數;其次,每一步結束後b的最低位的1都會變成0,之後一直保持為0,這意味著k步之後b至少是2^k的倍數,但b不超過最開始的a+b,因此只能為0。

3樓:王贇 Maigo

每次迴圈中,同一位上的 0+0 不會產生 1,0+1 和 1+0 結果還是乙個 1,1+1 結果就只剩乙個 1 了。

所以 1 的個數只減不增,減的次數必然有限。

最後一次 1 的個數減少之後,就不會再發生 1+1 的情況了,於是 b 就會變成 0,演算法結束。

4樓:塵浩

乙個樸素的感性認識拋磚引玉。

首先該演算法邏輯與加法是吻合的:異或做了沒有進製的加法,而與左移標記了哪幾位需要進製加1。

對於sameBitSum而言,左移一位必然導致低位補零;而sameBitSum是由與運算後左移得來的,與運算保證了這個零將傳遞下去不會丟失。在易想象的最差的情況下(sameBitSum中的零位全部由左移操作提供),第n輪迴圈時sameBitSum低位至少有n-1位零。

假設迴圈是無限的,則sameBitSum位數是無限的,以滿足其中有非零位從而繼續迴圈;又因為顯然有限大數字間運算的結果必然是有限位數的,因此假設不成立。

而在實踐中,計算機儲存位數有限,更必然決定了該迴圈次數存在上限不會超過整數型別長度。

二進位制可以表示任何數嗎?

hhh 可以的,十進位制轉換成二進位制當然行。轉換成二進位制是改變不了實數不可數的性質的。至於那很多不能被編碼的數那些是不可計算數,而不能說明它不能表示成二進位制。可計算數的範圍比實數要窄的多的多,實數多數都是不可計算數。計算機並不能表示所有實數,只能表示可計算數,因為計算機的編碼是有限的。當然也可...

請問二進位制有有理數域這種說法嗎?

Eddistan 二進位制只是由2個符號組成,十進位制由10個符號組成 本質上它們在只是符號表示 符號符號符號,重要的事情說三遍 人類為何用10個符號來表示數,是因為有10個手指.如果換做其他只有2個手指的智慧型生物,有可能就會發展成2個符號來表示數 所以二進位制有沒有有理數這種說法,這個提問壓根就...

用C語言程式設計把乙個十進位制的數化成二進位制

一笑天 Console.WriteLine 請任意輸入乙個數,輸出他的二進位制 Console.WriteLine 請輸入乙個數 int a int.Parse Console.ReadLine Console.WriteLine Convert.ToString a,2 Console.ReadK...