簡體   English   中英

C中未簽名的char 1的補碼

[英]Unsigned char 1's complement in C

假設我有以下代碼:

unsigned char c = 0;
printf("%u\n", ~c);

GCC打印值4294967295 ,表示它打印ULONG_MAX的值。

C11 6.3.1.3有符號和無符號整數:

  1. 將具有整數類型的值轉換為_Bool以外的其他整數類型時,如果該值可以用新類型表示,則該值不變。
  2. 否則, 如果新類型是無符號的,則通過重復添加或減去比新類型可以表示的最大值多一個值來轉換該值,直到該值在新類型的范圍內( .60)。
  3. 否則,將對新類型進行簽名,並且無法在其中表示值; 結果是實現定義的,還是引發實現定義的信號。

因此,在應用運算符~之前, c被提升為unsigned int 因此結果是0u的補數。 我對嗎? 還是未定義?

C在(無符號) char類型中不執行算術運算。 根據整數提升,所有參數都首先提升。 unsigned char提升到int ,如此的結果~x是-1。 然后,您將此值打印為unsigned int ,這將提供您觀察到的輸出。

暫無
暫無

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

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