char类型与int类型的相互转换、
相关知识:
1.计算机中的一个unsigned char型数据表示0~255,而一个signed char型数据表示-128+127,都是256的数字。这256个数字,在计算机的存储单元都是由0x000xFF表示的。
2.这256个数字相同的部分是0+127,都用0x000x7F表示存储。而0x800xFF即可以表示+128+255,也可以表示-128~ -1。当为unsigned char 时,0x80表示为+128~+255;当为signed char时则表示为-128~ -1。
3.计算机中的负数以二进制补码表示,补码 = 二进制数(原码)的反码 + 1
4.正数的补码与原码相同
一、长字节数据类型转为短字节数据类型(发生截断)
int main()
{
int i = 230;
char c = i;
unsigned char uc = i;
printf("%x\t%d\n",c,c); //ffffffe6 -26
printf("%x\t%d\n", uc, uc); //e6 230
return 0;
}
十进制230转为二进制表示为11100110,前面的0先不考虑,因为将它转化成为char类型,发生截断,会截取后8个字节,又因为char为有符号数,所以系统在判断11100110时,因为首位为1所以判定为负数,又因为负数在内存中是以补码的形式存储,所以要求其十进制表示的大小需要求它的原码,也就是除了符号位1之外的原码,先进行-1得到1100101,再次取反得到0011010,对应十进制数为26,加上之前的标志位为负数,所以得到打印出的数为-26,而赋值给unsigned char则正常运算即可,但有俩个问题还存在疑惑,一个是赋值给char截断后的数按照十六进制打印出来,为什么还会打印出这么多位?不应该只有俩位嘛?另一个是当i取值128时打印出来的十进制数时-128,个人计算时-127,不知道是哪里算错了,希望有高手来解答
二、短字节数据类型转换为长字节数据类型
char转换为int:在前面的三个字节补符号位
如果char的首位为1是负数,则补上0xffffff
如果char的首位为0时正数,则补上0x000000
从unsigned char转换为int,则前面补上0x000000.
三、将负数赋值给无符号数
int main()
{
unsigned int i = -1;
unsigned short s = -1;
unsigned char c = -1;
cout << "i=" << i << endl; //4294967295
cout << "s=" << s << endl; //65535
cout << "c=" << c << endl; // (为空)
}
负数在内存中以补码形式表示,所以-1原码为10000000 00000000 00000000 00000001求其补码则为11111111 11111111 11111111 11111111,此为转换为4字节的形式,当它给无符号赋值的时候,读取后就为232那么大的数了,对应2字节则为216大的数,但是还有一个疑问,为什么赋值给unsigned char后打印出来为空?
其他:
所谓有无符号的数 他们在位数上相同,如long 和DWORD 同样是32位 只是在第一位会不相同,有符号位的第一位是符号位
int: 4byte = 32 bit
有符号signed范围:2^31-1 ~ -2^31 即:2147483647 ~ -2147483648
无符号unsigned范围:2^32-1 ~ 0 即:4294967295 ~ 0
long: 4 byte = 32 bit
同int型
double: 8 byte = 64 bit
范围:1.79769e+308 ~ 2.22507e-308
long double: 12 byte = 96 bit
范围: 1.18973e+4932 ~ 3.3621e-4932
float: 4 byte = 32 bit
范围: 3.40282e+038 ~ 1.17549e-038
long long的最大值:9223372036854775807(>10^18)
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
作者:寂寂寂寂寂蝶丶
来源:CSDN
原文:https://blog.csdn.net/SwordArcher/article/details/82351996
版权声明:本文为博主原创文章,转载请附上博文链接!