unsigned int數相減時候的trick

2021-07-22 19:35:42 字數 555 閱讀 4820

假設是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...