簡體   English   中英

C中unsigned int的行為

[英]Behavior of unsigned int in C

C中無符號整數的大小為0 to 65,535 or 0 to 4,294,967,295

我用C中的以下代碼進行了測試:

unsigned int number = 0;
number -= 300;
printf("%d\n", number);

輸出:-300

我記得如果unsigned int變量的值低於0,它應該環繞並且我期望輸出類似於4294966996 但是從控制台打印的輸出是-300

我在C ++中測試了類似的語句,它確實給了我4294966996

我的問題是:為什么輸出-300盡管它是一個unsigned int


PS:我查看了幾個標題相似的帖子,但他們沒有解決同樣的問題:

在C中簽名vs unsigned int

無符號整數差異的意外結果

因為printf("%d\\n", number); 即使參數未簽名,也會打印帶符號的值。 使用printf("%u\\n", number); 要正確打印無符號值。

只是@ UniCell的優秀答案背景。

硬件以完全相同的方式存儲intunsigned int 沒有不同。 如果您開始添加或減去它們,它們將以完全相同的方式溢出和下溢。

0xFFFFFFFF + 1 = 0
0 - 1 = 0xFFFFFFFF

如果我們將結果視為無符號,則0xFFFFFFFF表示4,294,967,295,否則表示-1。 它被稱為2的補充存儲。 加法和減法是符號無關的。 但乘法和除法不是,所以通常有不同的有符號和無符號機器指令。

這些變量的類型僅為編譯器所知,而不是在運行時。 printf的參數可以是任何類型,傳遞的變量在運行時不攜帶類型信息。 所以你必須告訴printf格式字符串如何解釋它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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