• 【C++】赋值过程中类型转换


    注意:以下内容摘自文献[1],修改了部分内容。

    1.赋值过程中的类型转换

      如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时自动进行类型转换。

    (1) 将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。

    (2) 将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。

    (3) 将一个double型数据赋给flout变量时,要注意数值范围不能溢出。

    float  f;
    double d = 123.456789e100;
    f = d;

    就会出现溢出的错误,因为超过了float型的数据范围。

    (4) 字符型数据赋给整型变量,将字符的ASCII码赋给整型变量。

    (5) 将一个int, short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量(发生截断)。例如

    short int i = 289;
    char c;
    c = i;          // 将一个int型数据赋给一个char型变量

          i = 289

    0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1

    c = 33

    0 0 1 0 0 0 0 1

    为了方便,假设一个int型数据占两个字节(实际上,在VC++ 6.0中占4个字节),得到的c = 33,只得到i的低8位。

    (6) 将signed型数据数据赋给长度相同的unsigned型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)。

    例子:

    // 20191009.cpp : 定义控制台应用程序的入口点。
    #include "stdafx.h"
    #include <iostream>
    #include <typeinfo>
    using namespace std;
    
    int main()
    {
        system("color 3f");
        unsigned short a;
        short int b = -1;
        a = b;
        cout << "a = " << a << endl;
        system("pause");
        return 0;
    }

    结果:

     不妨从变量值在内存中存储形式分析,数据在内存中都是以二进制形式的补码存储的。b = -1,-1的补码形式为:1111 1111 1111 1111,将它全部传给a,a是无符号短整型变量,a = 1111 1111 1111 1111 = 65535;如果b为正值,且在0~32767之间,则赋值后数值不变。

    参考文献

    [1]谭浩强.C++程序设计[M].北京:清华大学出版社.

  • 相关阅读:
    git 学习
    公司领导写给新员工的信
    PLSQl远程连接oracle数据库
    hdu2222之AC自动机入门
    代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性
    ubuntu13.04安装SenchaArchitect-2.2无法启动的问题
    MVVMLight Toolkit在Windows Phone中的使用扩展之一:在ViewModel中实现导航,并传递参数
    面试题24:二叉搜索树与双向链表
    Struts2中的包的作用描述
    filter-mapping中的dispatcher使用
  • 原文地址:https://www.cnblogs.com/chen-hw/p/11640512.html
Copyright © 2020-2023  润新知