今天看到一篇關於面試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之間的任意數。又可以演變為 如何快速的從...