在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
注意:以下内容摘自文献[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
c = 33
为了方便,假设一个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].北京:清华大学出版社. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论