為什麼C語言中2個無符號數相減會得到負數?
01-05
因為您用%d來輸出了,也就是把一個整型解讀為一個帶符號整型然後輸出其值,所以把本來是無符號整型的c給解讀成帶符號了。您需要的是%u。
666……
因為輸出的是什麼,和變數本身的類型無關,而和
「你告訴printf變數的類型是什麼」有關
在printf中唯一能用來確定參數類型和個數的東西就是作為第一個參數的字元串了內存裡面存的東西是一定的,然後就是我們怎麼看待它的問題!
方便起見,假設int就用4位表示
a的二進位表示是 0001b的二進位表示是 0010
a - b溢出,就成了 1111又因列印的是有符號,最高位是符號位,也就是(-1)*2^3 +1*2^2 +1*2^1 +1*2^0也就是-1了無符號和有符號的機器級表示是一樣的因為你輸出時用了%d,這會默認把變數按照int處理
你用cout輸出看看
推薦閱讀:
※c++中有些重載運算符為什麼要返回引用?
※為什麼C語言考試不夠好?
※%d的格式不能用來輸出sizeof的返回值嗎?
TAG:C編程語言 |