C++ 無符號的整型範圍不是0至4294967295嗎?為什麼在範圍內顯示錯誤了?
04-30
輸出無符號應當用%u、%lu等等。
unsigned int 是0-4294967295,你輸入的是4294967294,這個是符號整數,0xfffffffe,對應的符號整數就是負2.
雖然你聲明的類型是unsigned int,但是列印用的是%d,這個是有符號整數的,如果要列印無符號整數,用%ud。用%d會進行類型轉換,相當於(int)(a),0xfffffffe就變成-2了
無論是什麼類型的數字,在內存裡面都是一串二進位而已。你要給print方法指定列印的類型她才會正常顯示哦。而你指定的是有符號整數。
int signedInt = -1;printf("%u
", signedInt);這裡列印的就是4294967295了。計算機怎麼得到這個數的呢?首先[-1]=[1000 …… 0000 0001]二進位
[-1] + 2^32 = [0000 0000 …… 0000 0000]原 = [1111 1111 …… 1111 1111]反碼 = 4294967295
以後有符號的負數轉為無符號的,都要先加 2^32 後再取反,就可以與其它數相加了。最近學了補碼,這個問題迎刃而解
推薦閱讀:
※C語言如何定義出指定變數名稱且佔1bit的全局變數?
※Cout<<"hello"<<endl;具體做了什麼操作,endl不是起到換行和刷新緩衝區的作用嗎?為啥不加endl,也能立即顯示輸出內容?
※在已知私鑰的條件下,如何編程(C/C++)實現SSL數據解密?
※以下代碼可以提速嗎?
※Release編譯有什麼特點?我的程序用Debug編譯能運行但是用Release卻不行,說明了什麼?
TAG:CC |