无符号数据和有符号整数进行运算,是有符号整数向无符号整数靠齐。这里,我们可以总结一条规则:整形数运算,总是遵循一个原则:小的往大的扩展。
从小到达:short -> unsigned short -> int -> unsigned int
之所以这里有符号数类型长度比无符号数类型长度小,区别在于最高位使用与否。下面看看几个例子:
eg1:
int a=-6;
unsigned int b = 3;
typeid(a+b)-----------------------unsigned int a+b结果:为一个很大的整数
潜在:int --> unsigned int
eg2:
unsigned short s1 = 3;
int i2= -5;
typeid(s1+i2) ----------------------int a+b结果:-2
潜在:unsigned short--> int
- int main()
- {
- int a = -6;
- unsigned int b = 4;
- if(a+b > 0)
- printf("a+b>0\n");//这句话被打印
- else
- printf("a+b<0\n");
- int z = a+b;
- if(z > 0)
- printf("z>0");
- else
- printf("z<0");//这句话被打印
- }
特点:是有符号的向无符号的转化 如果 int z=a+b; 肯定转化为整形的 整形包括负的和正的两个