为什么这段代码的输出是fffffff9?

时间:2017-10-30 17:29:05

标签: c++

int main(){
    char c=0371;
    cout<<hex<<(int) c;
 return 0;
}

我将 c 转换为二进制系统(011 111 001),然后转换为十六进制(f9)。那为什么它给结果fffffff9而不是f9?

1 个答案:

答案 0 :(得分:4)

如果系统上的char类型已签名,则值0xf9为负数(具体而言,为-7)。因此,当您将其转换为整数时,它会为整数提供数值-7,它具有十六进制表示形式0xFFFFFFF9(如果您使用的是带符号的32位整数表示)。

如果你明确地将你的字符值设为unsigned char,那么C ++会把它转换为正值249,它具有等效的整数值249,十六进制表示0x000000F9。