[英]Can someone explain the output of following statement in C?
我在控制台上運行以下代碼,但我無法理解這個 output?為什么這個程序不拋出錯誤而是打印一個值?
#include<stdio.h>
int main()
{
unsigned int a = -1;
printf("%u",a);
}
Output:4294967295
我無法理解這個 output?
有signed int
值-1
被轉換為unsigned int
。 從C11 6.3.1.3p2 開始,將有符號值轉換為unsigned int
的“新類型”(您可能會發現cppreference 隱式轉換頁面更容易接近):
當一個 integer 類型的值轉換為除 _Bool 之外的另一個 integer 類型時,如果該值可以用新類型表示,則保持不變。
否則,如果新類型是無符號的,則在新類型可以表示的最大值的基礎上重復加減一,直到該值在新類型的范圍內。
所以-1
在unsigned int
中是不可表示的。 所以我們應該在該值上加上或減去UINT_MAX+1
以獲得可以用unsigned int
表示的東西。 所以我們將UINT_MAX+1
添加到-1
,假設在您的平台上UINT_MAX
是4294967295
,我們得到UINT_MAX + 1 - 1 = 4294967295
。 太好了,現在該值可以用unsigned int
表示,並且該值已分配。
為什么這個程序不會拋出錯誤
因為 C 是一種弱類型語言,在 integer 類型的情況下,某些類型之間的隱式轉換只是語言的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.