簡體   English   中英

為什么unsigned char在c ++中返回與signed char相同的值?

[英]Why does an unsigned char return the same value as a signed char in c++?

我的印象是兩者都會設置為不同的值,但這三件事都輸出完全相同的字符。 是否存在某種隱式轉換或什么?

unsigned char unsc1 = 128;
std::cout << "Unsigned Char 1 = " << unsc1 << std::endl;


signed char sc1 = 128;
std::cout << "Signed Char 1 = " << sc1 << std::endl;



char c1 = 128;
std::cout << "Char 1 = " << c1 << std::endl;

當兩者都設置為254時會發生同樣的事情,我的理解是簽名的變量類型不能容納與未簽名的數據一樣多的數據。

當您將cout和unsigned字符發送給cout時,它們將被解釋為char 如果您希望看到不同的結果,請在打印前將這些值轉換為int

unsigned char unsc1 = 128;
std::cout << "Unsigned Char 1 = " << (int)unsc1 << std::endl;


signed char sc1 = 128;
std::cout << "Signed Char 1 = " << (int)sc1 << std::endl;

現在可能所有現存的平台上signed char都會打印-128,而未signed char會打印128 (根據標准,章節4.7,第3節,它是實現定義的)。

關於ideone的演示 )。

眾所周知,128不是可打印的ASCII碼。 所以你的三個陳述中沒有一個會得到一個角色。 至少在我的環境中,gcc版本4.1.2,libc6,x86-64

我不認為這是正確的:

signed char sc1 = 128;  // overflow.

你好像嘗試了某種“未定義的行為”。

暫無
暫無

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

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