溢出的无符号整数

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)

  • @Zhenya是的,在C和C++中. (2认同)
  • @Ramhound:当然很重要.如果标准没有定义这种行为(就像它不适用于有符号整数类型),那么你就不能依赖它. (2认同)
  • 这个答案不一定相关。根据编译器限制,表达式“253473829*13482018273”可能使用有符号整数算术,这可能会在结果转换为“unsigned int”之前溢出。 (2认同)

eva*_*rix 6

与签名对应物不同,无符号整数溢出表现出明确定义的行为.

值基本上"包裹".它是安全的,通常用于倒计时或散列/ mod函数.

  • 无符号不会溢出 (3认同)
  • 我的意思是作为比较尝试通过与类似的东西相关来解释它.我稍后用环绕比特确定了我的陈述.啊技术性. (2认同)