美文网首页
[基础]C++:类型转换

[基础]C++:类型转换

作者: 离群土拨鼠 | 来源:发表于2019-03-16 10:51 被阅读0次

我们常常将不同类型的数据相互转换,但也常常发生错误。当然可以由编译器来帮忙检查。但是,我们认为的一些数据类型转换的错误在C++里有可能完全合法。从而编译器没法检查出来。下面看这样一段代码:

#include<iostream>
using namespace std;
int main()
{
    bool b = 42; //b为真
    int i = b; //i的值为1
    i = 3.14; //i的值为3
    double pi = i; //pi的值为3.0
    unsigned char c = -1; //书上说是255
    signed char c2 = 256; //未定义
    cout << b << endl;
    system("pause");
    return 0;
}

你会发现编译器全通过了,让我们看看具体是怎么转换的:

  • 当我们把一个非bool类型赋给bool时,0代表false,其余结果为true
  • 当我们把一个bool赋给非bool时,false对应的结果为0true对应的结果为1
  • 当我们把一个非int类型赋值给int时,结果保留整数部分。
  • 当我们把非doudle类型赋值给doudle类型时,小数部分为0。
  • 当我们赋给无符号类型一个超过它范围的值时。结果为对无符号类型范围取模后的余数。
  • 当赋给带符号类型一个超过它表示范围的值时,结果为未定义。很可能让程序崩溃。

含有无符号类型和有符号类型同时运算

当一个算数表达式既有无符号又有int值时,int将先转换为无符号类型。然后在进行运算。

#include <iostream>
using namespace std;
 
int main()
{
    int i = -42;
    unsigned u = 10;
    cout << i + i << endl; //输出 -84
    cout << i + u << endl; //输出 4294967264
    system("pause");
    return 0;
}

你会发现i+u变成了一个很可怕的数。让我们看看具体怎么得到这个可怕的数:

  • int为32位,范围为2^32=4294967296。
  • 根据取模的定义(-42+4294967296)%4294967296=4294967254。
  • 4294967254+10=4294967264。

结论

当赋给无符号负数时就进行取模运算。

参考:C++primer 第五版

相关文章

  • (六)C++中的类型转换、IO流与STL标准模板库

    C++中的类型转换与STL标准模板库 一、C++类型转换 在C++中类型转换包含 static_cast、cons...

  • C++入门13 -- 类型转换,新特性,异常,智能指针

    类型转换 C语言类型转换:(type)expressionexpression(type) C++语言类型转换:x...

  • [基础]C++:类型转换

    我们常常将不同类型的数据相互转换,但也常常发生错误。当然可以由编译器来帮忙检查。但是,我们认为的一些数据类型转换的...

  • c++基础(类型转换)

    像我的老伙伴 javascript 天生是没有类型系统,只从服用了typescript之后才有了类型系统。像 ja...

  • C++类型转换

    C++类型转换 C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_c...

  • C++ 学习(2) ---- 基本语法介绍

    C++ 基本语法(2) C++基础语法说明模板NA运算符重载NA强制类型转换static_cast,const_c...

  • C++ 重载 Conversion 运算符

    C++ 中类型转换有四种方式: C 风格的转型 C++ 风格的转型 利用构造函数实现内置类型到用户定义类型的转换 ...

  • 数据类型转换

    写在前面 C/C++编程中常见数据类型转换,包括隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换在以...

  • C++中的类型转换

    C++中的类型转换 显示转换 命名的强制类型转换 static_cast dynamic_cast const_c...

  • C++面经

    1. 语言基础 1.1 C++的四种类型转换: const_cast => 用于将const变量转为非const;...

网友评论

      本文标题:[基础]C++:类型转换

      本文链接:https://www.haomeiwen.com/subject/dtncpqtx.html