自定義二進位制表示,進行整數的加減運算

2021-10-11 14:41:06 字數 1583 閱讀 6316

定義宣告:    

整數的自定義二進位制表示,由0x開頭,左為低位,右為高位

末尾位c字元,則表示資料為負整數

末尾位z字元,則表示資料為正整數

下面展示,使用該自定義二進位制表示,進行整數的加減運算:

加減運算都可以等價於:x+y=z運算

本例中:x=-90,y=273

短位數:0x0101101c    2^1+2^3+2^4+2^6=90        【整數:-90】

長位數:0x100010001z    2^0+2^4+2^8=273            【整數:273】

其中:短位數0x0101101c的位數為d=7位數二進位制數。

長位數0x100010001z的位數為e=9位數二進位制數。

第一步:將長二進位制數的最高位提取,用於跟短位數進行運算,剩餘部分保留。

0x100010001z    <->    0x000000001z    +0x10001000z

第二部:對0x000000001z進行加減1運算,為了製作最大值,保證異符號運算最後符號確定。

0x000000001z    <->    0x11111111z    +0x1z

第三部:調整最大值和短位數的位數一致

0x11111111z    <->    0x1111111z    +0x00000001z

第四部:調整後最大值與短位數同位運算:(等價於將短位數按位取反操作)

0x1111111z(正數)

+    0x0101101c(負數)

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

0x1010010z(正數)

第五步:將拆分剩餘部分加和(同符號,過2進1操作即可)

+0x10001000z    

+0x1z        

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

0x01001000z

+0x00000001z

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

0x01001001z

+0x1010010z

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

0x11101101z    <->    2^0+2^1+2^2+2^4+2^5+2^7=183

總結:@異符號位運算:

1.長位數,最高1位位置,置0

2.長位數去掉最高位,長位數前e-1位全部置1,將長位數前d位全部置0,再將長位數第一位位置置1

3.短位數,按位取反短位數

4.將上述三步產生的結果按照同符號位運算得到結果,最後符號位長位數符號

@同符號位運算:

1.按同位運算,逢2進1

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

整個過程可簡化為:

0x100010001z                        ->0x100010000z

0x100010001z->0x10001000z->0x11111111z->0x00000001z    ->0x10000001z

0x0101101c                        ->0x1010010z

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

0x11101101z    [正數:183]

整數的二進位制表示

目錄總結 整數的二進位制表示,需要區分正整數和負整數來看。看正整數的二進位制表示,就要先了解一下位權。十進位制 二進位制都有位權。以 123 為例 123 1 10 2 2 10 1 3 10 0。每個位置的位權都不一樣,十進位制從右到左,以 1 開始,依次乘 10 也就是說第 1 位為 1 第 2...

LintCode 二進位制表示

給定乙個數將其轉換為二進位制 均用字串表示 如果這個數的小數部分不能在 32 個字元之內來精確地表示,則返回 error 樣例 n 3.72 返回 error n 3.5 返回 11.1 題目很簡單,直接上 吧 public class binaryrepresention return res.r...

LintCode 二進位制表示

給定乙個數將其轉換為二進位制 均用字串表示 如果這個數的小數部分不能在 32 個字元之內來精確地表示,則返回 error 您在真實的面試中是否遇到過這個題?yes 樣例n 3.72 返回 error n 3.5 返回 11.1 好久沒做題 有點懵逼 根據資料試出來的 臥槽 public class ...