【问题标题】:operator << interprets arithmetic operation if the result is unsigned int or unsigned short如果结果是 unsigned int 或 unsigned short,则 operator << 解释算术运算
【发布时间】:2014-10-15 02:02:43
【问题描述】:

我在fedora 19 64bits下使用gcc 4.8.3

unsigned u1=10, u2=42;
unsigned short us1=10, us2=42;

int main() {
   cout << "u1-u2="<<u1-u2<<", us1-us2="<<us1-us2<<endl;
}

结果: u1-u2=4294967264, us1-us2=-32

signed 短 而它将第一个操作的结果解释为 unsigned int

【问题讨论】:

    标签: c++ unsigned short


    【解决方案1】:

    作为- 和大多数其他算术运算符的操作数,任何小于int 的整数类型值都将提升为int

    所以us1 - us2 的行为与(int)us1 - (int)us2 相同。

    这条规则在现代 C++ 中很烦人,但它是从 C 的最早版本开始出现的(因为 int 大小的寄存器用于算术运算),现在更改它会破坏太多代码。

    【讨论】:

    • 非常感谢你 我想一个回旋处会像 cout 一样转换为 unsigned
    • 在 C++ 中使用 static_cast 作为类型安全的转换方式。
    • 我想可能是一个环形交叉路口:unsigned short us1=10, us2=42, us3=us1-us2; cout
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多