如何判斷某個二進位制數如是否存在兩位1中間有包含0的情況?

時間 2021-05-30 12:49:38

1樓:法國球

如果要求數字不能以0開頭(010011必須改寫成10011)的話,這個問題其實是蠻簡單的。

假設這個數是a,如果a≠0,那麼它必然以1開頭,又要求兩個1中間不能有0,所以它必須長這樣:

a=11……100……0

(m個1後面接n個0)

這樣就很好辦啦,

a=11……100……0

=11……1*2^n

=(2^m-1)*2^n

=2^(m+n)-2^n

如果讓m=0,就得到剩下的乙個a=0的情況所以說,滿足題主要求的條件的所有二進位制數,就由(*)式無遺漏地全部找到啦!

2樓:Richard Xu

沒看懂題主的補充說明,「除1之外有多個0相連」和「存在兩位1中間有包含0」完全是兩個意思好嘛?

以下按照「存在兩位1中間有包含0」解答,並且假設題主的意思是乙個數的二進位制表示(而不是乙個01陣列)

(先說一句,其實遍歷的複雜度也就log(n)啊……為何不用遍歷)

假設原數(十進位制)是x,如果(~x)*(~(~x))<>0(~是按位取反),那麼x的二進位制表示中存在兩個1中間夾著0的情況。

其實是利用了取反之後原來的「前導1」都變成了0,然後前導0會被去掉。

所以第一次取反相當於確定了第乙個0的位置,第二次取反相當於確定了在出現過0後的第乙個1的位置。

舉例:x=(111100)2=60

~x=(000011)2=(11)2=3

~(~x)=(00)2=0

3*0=0

x=(101010)2=42

~x=(010101)2=(10101)2=21

~(~x)=(01010)2=(1010)2=10

21*10=210<>0

x=(100111)2=39

~x=(011000)2=(11000)2=24

~(~x)=(00111)2=(111)2=7

24*7=168<>0

二進位制有什麼好處,為何電腦都採用二進位制?

個人理解,就是之前有人先定了,然後大家認可,就一直這麼做。Eniac當初的十進位制肯定是有點複雜,但我想,三進製s也是可行的,零正負,三種狀態,也很符合認知,比如 贊同 反對 中立 但是目前的基礎都是二進位制了,想改也不太容易了。至於高低電平,為什麼不可以設定乙個中間的呢,高低電平同樣會有干擾區間,...

「二進位制」是什麼?

十萬個為什麼 先說十進位制,逢十進一,就是9 1 10。這裡的1代表了10個數 狀態。從0到9,用數學說就是十的幾次冪 而2進製,逢2進1,就是1 1 10。這裡的1代表了2個數 狀態,分別是0和1,用數學說就是2的幾次冪。 沙漠小草 二進位制,二 有兩個數字,分別是0 1,進 這兩個數迴圈和重複使...

十進位制轉換成二進位制及二進位制轉換成十進位制是如何轉換的

年年有魚 進製轉換方法如下 1 二進位制 十進位制 例 1101 2 13 10 1101 2 1 2 3 1 2 2 1 2 0 8 4 1 12 1 132 十進位制 二進位制 例 14.625 1110.101 2整數部分 14 10 1110 2 14 2 0 7 2 1 3 2 1 1 2...