簡體   English   中英

為什么printf()輸出-1表示大整數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM