#include<iostream>
using namespace std;
int main()
{
char a = 0xb6;
int b = a;
cout << b << " " <<hex<< b << endl;
system("pause");
return 0;
}
首先 定义一个字符 a = 0xb6
字符在电脑中存储为固定的一个字节 也就是八位 以ASCII码的形式存储 1011 0110
然后将char类型整型提升为int类型 b = a
int在64位系统中的占用字节数为4个字节 也就是32位
所以需要在int的前26位补1或者补0
这要根据char的首位来判断 首位为1则补1否则补0
于是b在电脑中存储的方式为 11111111 11111111 11111111 1011 0110 也就是ffffffb6
int为有符号数 电脑中存储十进位的负数时会将 其求补码然后加1 于是对于上述存储取逆过程对应的十进制数就是-74
如果将char定义为unsinged
转化为int的时候会将前面的26位填充为0
#include<iostream>
using namespace std;
int main(){
unsigned char a = 0xb6;
int b = a;
cout << b << " " <<hex<< b << endl;
system("pause");
return 0;
}