目录
1、自动类型转换
2、强制类型转换
自动类型转换(隐式类型转换)
(1)运算中,先进性水平位置转换。
(2)水平位置转换后,如果仍存在不同类型的数据,就进行纵向转换
(3)char对应的是ascii码 例‘1’———对应的整数是49
实型——整型 | 舍弃小数点部分 |
整型——实型 | 数值不变,补足小数点有效位6位 |
字符型——整型 | 保持字符不变,进行符号扩展 |
整型——长整型 | 保持字符不变,进行符号扩展 |
长整型——整型 | 截取后半部分 |
无符号型——长整型 | 数值不变,高位补0 |
强制类型转换(显式类型转换)
是指利用强制类型转换运算符来实现数据类型转换的。
格式:(类型标识符)操作数
(类型标识符)(表达式)
例:int a;
(char) a; //把a的类型转换为字符型
(int)x+y | 将变量x转换为整形后再与变量y相加 |
(int)(x+y) | 将x与y相加后再转换为整型 |
int main()
{
char a='4';
int b,c;
b=(int)a+2;
c=(int)(a+2);
printf("%d\n",b);
printf("%d\n",c);
}
溢出错误:得出的数值大于类型的数值,将会截取高位部分,例得出的结果位60000,超出int的-32768~+32768,其结果为60000-32768
位运算
& 按位与运算符
例:两者都为1时才是1
a | 10101101 |
b | 11001001 |
结果 | 10001001 |
| 按位或运算符
例:有一个为1就为1
a | 10101101 |
b | 11001001 |
结果 | 11101101 |
^ 按位异或运算符
例:两者相同就为0
a | 10101101 |
b | 11001001 |
结果 | 01100100 |
~ 按位取反运算符
例:针对一个操作符 1——>0 0——>1
a | 10101101 |
结果 | 01010010 |
<< 左移运算符
例:a<<b 将a全部左移b位
a=10101101 b=2,将a向左移两位,右边空的补上0
>> 右移运算符
与左移相似,但是左端空出的补0或1,当a是无符号整型或字符型补0,如果a是带符号的整型,符号位为0则补0,符号位为1则补1.