GIL*_*ESH 17 c++ integer-overflow unsigned-integer
unsigned int当我溢出它时会包含什么?具体来说,我想用两个unsigned ints 进行乘法:unsigned int乘法结束后会有什么?
unsigned int someint = 253473829*13482018273;
Run Code Online (Sandbox Code Playgroud)
Pub*_*bby 24
unsigned 数字不能溢出,而是使用modulo的属性进行环绕.
例如,当unsigned int为32位时,结果为:(a * b) mod 2^32.
正如CharlesBailey指出的那样,253473829*13482018273在转换之前可以使用有符号乘法,所以你应该unsigned在乘法之前明确:
unsigned int someint = 253473829U * 13482018273U;
Run Code Online (Sandbox Code Playgroud)
与签名对应物不同,无符号整数溢出表现出明确定义的行为.
值基本上"包裹".它是安全的,通常用于倒计时或散列/ mod函数.