![](/img/trans.png)
[英]Why do I get error “'cout' in namespace 'std' does not name a type” when I use “using cout = std::cout;”?
[英]Why is the code giving output of -61 when I do cout c but 195 when I cout a+b?
我寫了以下代碼,我不明白為什么當我 cout<<int(c) 時我得到 -61。
int main() {
char a= 'a';
char b= 'b';
char c= a+b;
cout<<int(a)<<" ";
cout<<int(b)<<" ";
cout<<int(a+b)<<" ";
cout<<int(c)<<" ";
return 0;
char 類型可以是有符號或無符號的。 它由編譯器標志調整。 Char 類型在大多數編譯器中默認是有符號的,由 8 位組成,1 位用於符號,7 位用於數值。 因此,有符號字符表示從 -128 到 127 的數值。這樣的一組值是一個環。 進一步增加 127 返回 -128。
如您所見,97 和 98 是 'a' 和 'b' 的 ASCII 碼。 在應用運算符之前,任何小於 int 的類型都會被提升為 int,因此 a+b 是 int 195。如果將 195 分配給有符號字符,則會發生有符號值溢出,這被認為是未定義的行為,因為可以表示有符號值與上面不同。 在您的情況下,195 在 68 上超過 127,因為 127+1 是 -128,因此 127+68 127+1+67 是 -128+67 是 -61。
C++ 沒有
operator+(char,char)<\/code> 。
因此,當您添加兩個
char<\/code>時,參數將提升為
int<\/code> ,結果為
int<\/code> 。
使用超出編譯器
char<\/code>范圍(似乎是
-128<\/code> ...
127<\/code> )的
int<\/code> (值
195<\/code> )進一步初始化
char<\/code> c 是 C++ 標准的實現定義行為。
在您的實現中,行為看起來很常見......對於值
x > 127<\/code>非常有效,結果是
x - 256<\/code> 。
195 - 256<\/code>是值
-61<\/code> 。
如果您想要
195<\/code>范圍內的 8 位整數,您應該使用
unsigned char<\/code>或
uint8_t<\/code> 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.