c语言-隐式类型转换,算数转换-创新互联
- 一.隐式类型转换
- 二.算数转换
1.隐式类型转换是通过整形提升方式来作用的,首先我们需要了解原码,反码,补码是怎么一回事.
原码,反码,补码:
1.正数的原码,反码,补码(三码相等),例如:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— 1的原码
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— 1的反码
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— 1的补码
2.负数的原码,反码,补码,例如:
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 —— -1的原码
//负数的原码符号位不变,其他位按位取反得到反码。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 —— -1的反码
//负数的反码加1得到补码。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 —— -1的补码
*计算机中的数据一律以补码形式存储
*补码转化到原码的形式有两种:
第一种:补码取反得到一串二进制序列(注意此序列不是反码)然后给此二进制序列加1得到原码。
第二种:补码减1得到反码再给反码取反得到原码。
对于在内存中所占字节小于int的数据,例如 char,short类型的数据,在进行加减时会进行隐形转换,转换成int类型的数据后再进行加减,下面我们来通过实例来体会一下隐式转换:
有符号整形提升符号位是几前面就添加几
无符号整形提升直接补0
int main()
{char a = 3;//有符号的a
//00000000000000000000000000000011 -- 3的补码
//截断
//00000011 -- 截断后的a
char b = 127;
//00000000000000000000000001111111 -- 127的补码
//截断
//01111111 -- 截断后的b
char c = a + b;
//00000011 -- 截断后的a
//01111111 -- 截断后的b
//将截断后的a和b整型提升
//00000000000000000000000000000011 -- 整形提升后的a
//00000000000000000000000001111111 -- 整形提升后的b
//00000000000000000000000010000010 -- a+b的结果
//10000010 -- 再进行截断存储到c里面
printf("%d\n", c); //此处c又会进行整形提升
//11111111111111111111111110000010 - 补码
//11111111111111111111111110000001 - 反码
//10000000000000000000000001111110 - 原码
//-126
return 0;
}
下面这个例子也很好的体现出了整形提升。
int main()
{char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if (a == 0xb6)//这里的a进行了整形提升所以a!=0xb6(10110110)
printf("a");
if (b == 0xb600)//同理
printf("b");
if (c == 0xb6000000)//这里由于c为int型所以不用整形提升,表达式成立输出c
printf("c");
return 0;
}
另外:
有符号的char的取值范围是:-128~127
无符号的char的取值范围是:0~255
如下图:
二.算数转换从这里我们可以直接看出上面代码的b(127)+a(3)的值为-126(顺时针走)
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类
型,否则操作就无法进行。下面的层次体系称为寻常算术转换。
long double
double
float
unsigned long int
long int
unsigned int
int //向上转化
例如这里是将a–>double,然后c的值为8.4
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前文章:c语言-隐式类型转换,算数转换-创新互联
文章起源:http://scyanting.com/article/dggojh.html