C++ 强制类型转换和赋值中的类型转换

ゝ一世哀愁。 2022-07-11 14:29 377阅读 1赞

强制类型转换

原C语言的形式:

(类型名)(表达式)

比如:

  1. (double)a //把a转换为double类型
  2. (int)(a+b) //把a+b的值转换为整型

需要注意的是:如果强制类型转换的对象是一个变量,那么该变量不需要用括号括起来;但是如果对象是一个包含多项的表达式,则表达式应该用括号括起来。

  1. (int)(a+b) //把a+b的值转换为整型
  2. (int)a+b //把a的值转换为整型,然后加b

C++新增加的形式:

类型名(表达式)

该形式的类型名不需要括括号,但是待转换的对象不管是变量还是表达式都需要用括号括起来,比如:

  1. int(x)
  2. int(x+y)

举个栗子:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. float x;
  6. int i;
  7. x = 3.6;
  8. i = (int)x;
  9. cout<<"x = "<<x<<",i = "<<i<<endl;
  10. getchar();
  11. return 0;
  12. }

运行结果:
x = 3.6,i = 3

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

字符型与数值型的说明:
在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型。其中数值型包括 整型与浮点型;字符型即为char。

(1)将浮点型数据赋值给整型变量时,舍弃其小数部分。

  1. float x;
  2. int i;
  3. x = 3.6;
  4. i = x;
  5. cout<<"x = "<<x<<",i = "<<i<<endl;

运行结果:
x = 3.6,i = 3

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

  1. float x;
  2. int i;
  3. i= 3;
  4. x = i;
  5. cout<<"x = "<<x<<",i = "<<i<<endl;

运行结果:
x = 3,i = 3

(3)将double型数据赋值给float型变量时,注意数值范围溢出。

  1. float x;
  2. double i;
  3. i= 3.123456789e100;
  4. x = i;
  5. cout<<"x = "<<x<<",i = "<<i<<endl;

此时出现溢出。

(4)字符型数据可以赋值给整型变量,此时存入的是字符的ASCII码。

  1. char x;
  2. int i;
  3. x = 'C';
  4. i = x;
  5. cout<<"x = "<<x<<",i = "<<i<<endl;

运行结果:
x = C,i = 67

(5)将一个int,short或long型数据赋值给一个char型变量,只将低8位原封不动的送到char型变量中。
(6)将有符号型数据赋值给长度相同的无符号型变量,连同原来的符号位一起传送。

发表评论

表情:
评论列表 (有 0 条评论,377人围观)

还没有评论,来说两句吧...

相关阅读