int main(){
char c=0371;
cout<<hex<<(int) c;
return 0;
}
我将 c 转换为二进制系统(011 111 001),然后转换为十六进制(f9)。那为什么它给结果fffffff9而不是f9?
答案 0 :(得分:4)
如果系统上的char
类型已签名,则值0xf9为负数(具体而言,为-7)。因此,当您将其转换为整数时,它会为整数提供数值-7,它具有十六进制表示形式0xFFFFFFF9(如果您使用的是带符号的32位整数表示)。
如果你明确地将你的字符值设为unsigned char
,那么C ++会把它转换为正值249,它具有等效的整数值249,十六进制表示0x000000F9。