簡體   English   中英

當我給char分配一個short時會發生什么類型的轉換?

[英]What type conversion happen when I assign a short to a char?

如果滿足以下條件,會發生什么類型的轉換:

short s = 1234;
char c = s;

會先將s轉換為int ,然后將此int轉換為char並分配給c嗎? 還是將s直接轉換為char並分配給c

s不會轉換為int

在這里1中,我們使用超出char范圍的值初始化c 普通char可以是有符號的也可以是無符號的(大多數編譯器都有一個切換選項)。 如果對char進行簽名,則相關標准文本位於[conv.integral] / 3中:

如果目標類型是帶符號的,則該值可以用目標類型(和位字段寬度)表示,則該值不變。 否則,該值是實現定義的。

“實現定義的”意味着您的編譯器必須記錄在這里發生的情況。 在現代系統上的常見實現是,多余的位將從最高有效端開始被截斷。

重寫此代碼以不依賴於實現定義的行為是一個好主意。 這樣,當您在其他系統上進行編譯時,行為就不會改變。

如果char是未簽名的,則上一段涵蓋了這種情況:

如果目標類型是無符號的,則結果值是與源整數一致的最小無符號整數(取模2 n ,其中n是用於表示無符號類型的位數)。 [注意:在二進制補碼表示中,此轉換是概念性的,並且位模式沒有任何變化(如果沒有截斷)。 —尾注]

因此,所得的char值應為1234-1024 = 210


1這篇文章假設您使用8位字節的系統。 周圍不是這種情況,有一些專門的芯片,在那些系統上, char可以保持1234的值就可以了,不需要更改任何值。

暫無
暫無

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

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