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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!