c++ unsigned和int类型转换及运算

本文总结了C++中无符号类型(unsigned)和有符号类型(int)之间的转换和运算规则。当赋值给无符号类型负数时,结果是对无符号最大值取模后的余数。在运算中,有符号类型会被转换为无符号类型,运算结果也是无符号。为了避免溢出和不可预测的结果,应避免混合使用有符号和无符号类型。
摘要由CSDN通过智能技术生成

一、规则总结

1. 在c++中,如果赋值给无符号类型一个超过它表示范围的值(如负数),结果是初始值对无符号类型表示数值最大值取模后的余数。

2. 在c++中,如果表达式中同时有无符号类型和有符号类型,会默认将有符号类型转换为无符号类型进行运算,运算结果也是无符号类型。

二、以int和unsigned为例

1. 如果赋值给unsigned一个负数值,结果是什么?结果是将该负数对unsigned表示数最大值取模后的余数。

(1)unsigned表示数最大值

在大部分编译器中该类型占4个字节,则最大值是2的32次方,为4294967296。

(2)负数的取模运算

负数的取模运算和数学中的取余运算不同,区别主要体现在:取模运算商是向负的无穷大取值,而取余运算商是向0取值。举例说明:如-3对2取余商为-1,但-3对2取模商则是-2。

(3)赋值给unsigned一个负数值时实际得到的结果

                         

上述程序的输出结果是:


结果是怎么算出来的呢?

u=-1,-1除以4294967296,商是-1,而取模后的余数是4294967296-(-1*-1)=4294967295

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值