整型提升的原则:当一个小字节数,向大字节数转换时,有符号补0或1,无符号补0;
为什么会发生测试结果呢,让我们来看一下
在64位的环境中char是1个字节8位
char a=1;
1000 0001 原码 整形提升 11111111 11111111 11111111 11111111 补
1111 1110 反码 10000000 00000000 0000000 0000000 反码
1111 1111 补码 请看右边 10000000 00000000 0000000 0000001 原码
计算机中存的是补码(计算机识别):转换时要化为源码(人类识别) 结果为-1;
unsigned char b=-1;
1000 0001 源码 整形提升 00000000 00000000 00000000 11111111 补码
1111 1110 反码 00000000 00000000 00000000 11111111 反码
1111 1111 补码 00000000 00000000 00000000 11111111 原码
2^8-1=255;(原反补相同)
32位 64位
char 1 1
short 2 4
指针 4 8
int 4 4
double 8 8
float 4 4
long 4 8
longlong 8 8