假設是8位的unsigned int整數。
乙個是x=134,乙個是y=246.
首先拿過來就是計算它們的二進位制位:
134 = 1000,0110b
246 = 1111,0110b
因為是無符號數,所以解釋成正數,也就意味著這樣的看似原碼的二進位制位就是補碼表示,也可以理解為符號位在第九位藏著乙個0.
這裡主要討論乙個細節:
134-246的計算過程。
是不是想直接用134-246得到乙個-92,再轉成補碼?
最能體現底層的思路是這樣:
x-y = [x]補+[-y]補
因為[x]補就是1000,0110b
[y]補 = 11110,0110
我們知道求[-y]補 就是將[y]補連同符號位每位求反加1
則結果就是:10000,0110 + 0000,1010 = 1001,0000 ==>90h
翻譯成無符號整數就是:144
翻譯成有符號整數就是:-112.
所以怎麼算都不是-92,因此,這裡必須用底層的思路,這才是基本法。
數32位 unsigned int中1的個數
參考文章 最簡單的方法 int bitcount0 unsigned int n return c 消除統計法 int bitcount2 unsigned int n return c 8bit查表法 unsigned int table 256 int bitcount2 unsigned in...
java double數相加和相減的問題解決
8 double的計算不精確,會有類似0.0000000000000002的誤差,正確的方法是使用bigdecimal或者用整型 9 整型地方法適合於貨幣精度已知的情況,比如12.11 1.10轉成1211 110計算,最後再 100即可 10 以下是摘抄的bigdecimal方法 11 publi...
引數時間相減 py 計算去年,明年,多少天前的時間
py 計算去年的時間 今天日期 today datetime.date.today 去年時間 last year today datetime.timedelta days 366 star int time.mktime time.strptime str last year y m d prin...