C++中unsigned int和int运算的问题

2023-12-14 18:01:17

在使用unsigned int和int运算期间碰到了很多次的问题,这里简单记录一下

unsigned int用来表示0~294967295的整数,也即是2^32-1


unsigned int设置为负数

测试了一下,在实际环境中还是可以为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之间的运算

如果进行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之间的运算

当出现无符号整型(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);

在这里插入图片描述

文章来源:https://blog.csdn.net/Mr_Sun88/article/details/134998522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。