zoukankan      html  css  js  c++  java
  • 【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].北京:清华大学出版社.

  • 相关阅读:
    【bzoj 2159】Crash 的文明世界
    【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数
    【解题报告】网络流24题
    【bzoj 4449】[Neerc2015]Distance on Triangulation
    【ARC 063F】Snuke's Coloring 2
    【LOJ 6041】「雅礼集训 2017 Day7」事情的相似度
    【AGC 005F】Many Easy Problems
    【AGC 002F】Leftmost Ball
    替罪羊树
    状压dp
  • 原文地址:https://www.cnblogs.com/chen-hw/p/11640512.html
Copyright © 2011-2022 走看看