[英]Why does printf() output -1 for large integers?
我正在閱讀第二版K&R書籍,其中一個練習需要打印limits.h標題中定義的所有最大整數值。 但是,這......
printf("unsigned int: 0 to %d\n", UINT_MAX);
...輸出以下內容:
unsigned int: 0 to -1
我怎么得到-1? 有誰能解釋這種行為?
我在Vista上使用Digital Mars C編譯器。
這是因為如果將UINT_MAX視為有符號整數,則UINT_MAX將解析為-1。 原因是,整數用二進制表示。 因此,-1和4294967296(即UINT_MAX)具有相同的位表示(0xFFFFFFFF,即所有位設置),這就是為什么在這里得到-1的原因。
更新:
如果您使用“%u”作為格式字符串,您將獲得預期的結果。
在printf中,我相信%d是帶符號的十進制整數,請嘗試%u。
unsigned int的最大值具有最高有效位集(全部為1)。 使用signed int,最重要的位指定負數,因此當您將unsigned int打印為signed int時,printf認為它是負數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.