簡體   English   中英

有人可以解釋 C 中以下語句的 output 嗎?

[英]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 類型時,如果該值可以用新類型表示,則保持不變。

否則,如果新類型是無符號的,則在新類型可以表示的最大值的基礎上重復加減一,直到該值在新類型的范圍內。

所以-1unsigned int中是不可表示的。 所以我們應該在該值上加上或減去UINT_MAX+1以獲得可以用unsigned int表示的東西。 所以我們將UINT_MAX+1添加到-1 ,假設在您的平台上UINT_MAX4294967295 ,我們得到UINT_MAX + 1 - 1 = 4294967295 太好了,現在該值可以用unsigned int表示,並且該值已分配。

為什么這個程序不會拋出錯誤

因為 C 是一種弱類型語言,在 integer 類型的情況下,某些類型之間的隱式轉換只是語言的一部分。

暫無
暫無

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

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