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

在使用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);

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 有什么区别? unsigned short 和 unsigned short int 是等价的,都表示无符号短整型,它们的取值范围都是 到 65535。在 C 语言,short 和 short int 也是等价的。 ### 回答2: C的数据类型unsigned short和unsigned short int是等价的,都表示无符号短整数。 unsigned表示无符号,也就是没有正负号,只能表示非负整数。short表示短整数,占2个字节(16位),范围为0到65535。 unsigned short和unsigned short int虽然在写法上有差异,但语义上是完全一样的,都表示相同的数据类型。在C语言,类型名可以省略int关键字,所以unsigned short和unsigned short int是等效的写法。 这两个类型常用于对不需要负数的整数进行存储和处理。由于省略了符号位,无符号整数类型可以表示更大的正数范围,但不能用来表示负数或需要进行算术运算的场景。 通过使用unsigned short(int)类型,我们可以节省内存空间,特别是在对大量非负整数进行存储和计算时。然而,在使用该类型时需要注意溢出问题,因为它的取值范围有限,当数据超过该范围时可能会导致数据丢失或错误结果。 总的来说,unsigned short和unsigned short int都表示无符号短整数类型,在C语言可以互换使用,都适用于存储和处理不需要负数的非负整数数据。 ### 回答3: c语言unsigned short 和 unsigned short int 是相同的数据类型,用来表示无符号的短整数。unsigned short 被广泛使用,unsigned short int 则是对该类型的完整命名。在C语言,short intint 可以互换使用,因此 unsigned short int 也可以简写为 unsigned short。 unsigned short 和 unsigned short int 可以保存范围在0到65535之间的整数值。其unsigned 表示该类型的变量只能保存非负的数值,short 表示该类型的变量占用的内存空间较小,通常为2个字节。因此,unsigned short 和 unsigned short int 可以用来节省内存空间,特别适合用于表示较小的正整数。 由于 unsigned short 和 unsigned short int 并无本质区别,所以在使用时可以视个人习惯来选择使用哪种命名方式。根据C语言的命名规范,一般情况下建议使用 unsigned short,因为它更加简洁明了。但是,在某些特定场景,也可以使用 unsigned short int 来强调该变量的数据类型,提高代码的可读性。 总之,unsigned short 和 unsigned short int 都是C语言表示无符号短整数的数据类型,没有实际上的差别,只是在命名上稍有不同。在使用时可以根据个人习惯和项目要求选择合适的命名方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值