負二進位制的面試題

2021-09-05 13:39:49 字數 1547 閱讀 2907

今天看到一篇關於面試atc的心得,呵呵,裡面提到了乙個負二進位制的題目:d m$也真夠能折騰的。

1.  如何用負二進位制表述十進位制等式5+3=8? (原題)

解: dcba(-2)=d*(-2)^3+c*(-2)^2+b*(-2)^1+a*(-2)^0 (dec)

=-d*2^3+c*2^2-b*2^1+d (dec)

則: 101  (neg-bin) == 5(dec)

111  (neg-bin) == 3(dec)

11000(neg-bin) == 8(dec)

2.  如果以豎式形式描述負二進位制加法計算? (我無聊自己給自己出的:d)

解: 首先得歸納一下負二進位制加法規則,

凡n位上的數字,n為奇數的,如個位、百位、萬位等,相加結果得正數,可以與低位相加的進製相抵

凡n位上的數字,n為偶數的,如十位、千位等,相加得負數,可以與低位相加的進製相抵 

54321 

00101 (a) 

+ 00111 (b) 

------------ 

11000     

0+1=1  (neg-bin)

1+1=110(neg-bin)

0+0=0  (neg-bin)

其中,第一位相加的進製與數b上的第二位上的1相抵,所以和的第

一、二位為0,

第三位兩個1相加為110,至此加法結束。

3.  更加複雜一點的法則例項:豎式快速演算法

解: 首先我們兩位兩位的分析豎式加合,其中有些模式應用起來很方便

11 == 00

01 01 == 00

11 11 == 10

11 10 == 11

01 01 == 11

10 01 == 110

01 10 == 1100

10 10 == 1101

11 11 == 1101

10 可見,有些兩位的區域性運算可以在豎式中直接消除,而有些則需要擴充套件至3位到4位,來看個例子

0110101010

+ 0010100101

----------

01***x1111 (利用快速消除法則所得的快速結果)

1100       (擴充套件到4位)

+   1100     (擴充套件到4位)

-----------

0011001111 (直接得出答案)

胡亂敲乙個豎式計算起來耍耍,

1010001010101001

1101010100100111

----------------

xx11011110xx1100

1101

1100

------------------

1101110111xx001100

1101

------------------

110111011001001100

-41639 + -11037 = -52676 呵呵,驗算完畢

面試題 二進位制

之前論壇看到乙個面試題,很基礎的考察按位符運算,總結如下 按位與 只有對應的兩個二進位均為1時 結果位才為 1,否則為0。舉例 比如9 5,其實就是1001 101 1,因此9 5 1 規律 二進位制中,與 1相 就保持原位,與 0相 就為 0int fun int nvalue return nc...

1017 負二進位制轉換

題目描述 給出數字 n,返回由若干 0 和 1 組成的字串,該字串為 n 的負二進位制 base 2 表示。除非字串就是 0 否則返回的字串中不能含有前導零。示例 1 輸入 2 輸出 110 解釋 2 2 2 1 2 示例 2 輸入 3 輸出 111 解釋 2 2 2 1 2 0 3 示例 3 輸入...

筆試面試題 天平稱重與二進位制

有人曾問帳前卒一道題 至少需要多少個砝碼,才能稱出1 50g物體?這道題有兩個變種 1.至少需要多少砝碼 左物右碼 才能稱出1 50g物體?2.至少需要多少砝碼 砝碼可以放在任意一邊 才能稱出1 50g物體?第一問可以變為 至少多少個數字相加,可以表示1 50之間的任意數。又可以演變為 如何快速的從...