施工提示

本博文尚在施工中,内容并未完成且可能变更。

类型转换与溢出*

类型转换

  • 布尔型

    • 将值赋给布尔型时,赋 0 时得到 false,否则得到 true。

    • 将布尔型赋给其他类型时,赋 false 时得到 0,赋 true 时得到 1。

      int m = 3, n = 5;
      bool b = false;
      m = b;  // 得到 m = 0
      b = n;  // 得到 b = true
      
  • 无符号类型:给无符号类型赋超出其范围的值,会得到取模后的余数。

    // 8 位的无符号字符可以表示 0~255 之间的值
    unsigned char c = 0;
    c = -1;  // -1 对 256 取模,得到 c = 255
    

    另一个例子是把无符号类型与带符号类型一起进行算术计算:

    unsigned u = 1;
    int k = -3;
    // 对于 32 位 int,以下输出:4294967294
    cout << u + k << endl;
    
  • 带符号类型:给带符号类型赋超出其范围的值,该行为是 未定义行为,产生不可预料的后果。