簡體   English   中英

從int到char的賦值如何在C中工作?

[英]How assignment from int to char works in C?

當您在C中將int分配給char時會發生什么? 是否總是只忽略左側的多余位?

示例(4字節int):

unsigned char c = 0;
unsigned int i = 500;

c = i; // c is 244

c = i << 24 >> 24; //c is 244

i = i << 24 >> 24; //i is 244

在二進制中, 50011111010024411110100

通常,這正是發生的情況。 ISO / IEC 9899:2011標准的第6.3.1.3節規定了在這種情況下必須發生的事情:

6.3.1.3有符號和無符號整數

  1. 當具有整數類型的值轉換為除_Bool之外的另一個整數類型時,如果該值可以由新類型表示,則它將保持不變。
  2. 否則,如果新類型是無符號的,則通過重復地添加或減去一個可以在新類型中表示的最大值來轉換該值,直到該值在新類型的范圍內。 60)
  3. 否則,新類型將被簽名,並且值無法在其中表示; 結果是實現定義的,或者引發實現定義的信號。

60)規則描述了數學值的算術,而不是給定類型表達式的值。

您的案件屬於上述第2項(因為您的角色被宣布為無符號)。 在典型的計算機算術中,結果將與您描述的完全一致。

暫無
暫無

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

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