在使用unsigned int和int运算期间碰到了很多次的问题,这里简单记录一下
unsigned int用来表示0~294967295的整数,也即是2^32-1
测试了一下,在实际环境中还是可以为unsigned int设置为负数,但是在存储时会以一个非常大的正整数来表示,其规则如下
unsigned int num1 = -1;
unsigned int num2 = -2;
printf("num1:%u 2^32-1\n", num1);
printf("num2:%u 2^32-2\n", num2);
如果进行unsigned int规则内的运算,即两个大于等于0的unsigned int进行加、减、乘、除、逻辑运算是没有任何问题的,如下所示
unsigned int num1 = 100;
unsigned int num2 = 50;
printf("num1 + num2 = %u\n", num1 + num2);
printf("num1 - num2 = %u\n", num1 - num2);
printf("num1 * num2 = %u\n", num1 * num2);
printf("num1 / num2 = %u\n", num1 / num2);
printf("num1 > num2 is %u\n", num1 > num2);
这里有个特殊的情况,就是运算结果如果是负数,则最终会以一个非常大的整数来表示
unsigned int num1 = 1;
unsigned int num2 = 2;
printf("num1-num2 = %u\n", num1 - num2);
当出现无符号整型(unsigned int)和整型(int)之间的运算的时候,会隐式的将整型(int)转换为无符号整型(unsigned int)去计算
此时计算逻辑就和上边unsigned int之间的运算一样了,所以就会出现下面一些看上去比较奇怪的地方
当运算结果为负的时候
,本该小于0的结果输出变成了大于0
unsigned int num1 = -2;
int num2 = 1;
printf("num1 + num2 = %u\n", num1 + num2);
当进行运算的时候
,本该成立的等式不成立了
unsigned int num1 = -1;
int num2 = 1;
printf("%u\n", num1);
printf("%u\n", num2);
printf("%u\n", num1 < num2);