zoukankan      html  css  js  c++  java
  • c++ / c 数值类型的一些感悟

    Contrary to the other answers, there is no undefined behavior here, and there is no overflow. Unsigned integers use modulo 2n arithmetic.

    Section 4.7 paragraph 2 of the standard says "If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where n is the number of bits used to represent the unsigned type)." This dictates that -1 is equal to the largest possible unsigned int (modulo 2n).

    Section 3.9.1 paragraph 4 says "Unsigned integers, declared unsigned, shall obey the laws of arithmetic modulo 2n where n is the number of bits in the value representation of that particular size of integer." To make it clear what this means, the footnote to this clause says "This implies that unsigned arithmetic does not overflow because a result that cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting unsigned integer type."


    In other words, converting -1 to 4294967295 is not just defined behavior, it is required behavior (assuming 32 bit integers). Similarly, adding 3 to that value and yielding 2 as a result is also required behavior. In this case, the value of n is irrelevant. The third value printed by hello() must be 2 or the implementation is not compliant with the standard.

  • 相关阅读:
    Linux 切换用户
    Java之.jdk安装-Linux
    Java之.jdk安装-Windows
    java注解生成xml和包含CDATA问题
    Spring学习—生成图片验证码
    java学习——java按值传递和按址传递
    温水中被煮熟的程序员-人生的思考
    mysql操作sql的小技巧
    java的classLoader分析与jettty的WebAppClassLoader
    深入Spring:自定义事务管理
  • 原文地址:https://www.cnblogs.com/yetanghanCpp/p/8945109.html
Copyright © 2011-2022 走看看