定義宣告:
整數的自定義二進位制表示,由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 ...