算数转换
- 当执行算术运算时,如果操作对象的类型不同,就会发生数据类型转换。
转换规则:
- 朝着精度更高、长度更长的方向转换
- 保无符号规则:当运算符两边分别是signed 有符号类型和unsigned无符号类型时,发生算术转换,将signed有符号类型转换为无符号类型。
- 例如:下列输入结果为 大于
#include <stdio.h>
int i ; //全局变量未初始化,默认为0
int main()
{
i--; //i为有符号类型,i = -1
if (i > sizeof(i))
{
printf("大于");
}
else
{
printf("小于");
}
}
在if语句判断时,发生了数据类型的转换
- i为-1
- 二进制为1000 0000 0000 0000 0000 0000 0000 0001
- 补码为:1111 1111 1111 1111 1111 1111 1111 1111
- 算数转换,现在系统认定i为unsigned int型,无符号类型均为正数,源反补码相同
- 所以现在i的源码也为1111 1111 1111 1111 1111 1111 1111 1111
- 所以在if语句判断这里,i是大于4的(sizeof(i) = 4)
- 注意:i的实际值并没有发生改变,只是在运算时,解析方法变了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。