[C.C++] C语言数据类型转换

316 0
Honkers 2025-4-2 08:10:20 来自手机 | 显示全部楼层 |阅读模式


前言

C语言中,整型、单精度型、双精度型和字符型数据可以进行混合运算。字符型数据可以得与整型通用。例如:

  1. 100+′A′+8. . 65-2456. 75×′a′
复制代码

是一个合法的运算表达式。在进行运算时,不同类型的数据要先转换成同一类型,然后再进行运算。C语言数据类型转换可以归纳成三种转换方式:自动转换,赋值转换和强制转换。

一、类型自动转换

在进行运算时,不同类型的数据要转换成同一类型。自动转换的规则如图

转换方法为:

  1. float型数据自动转换成double型;
  2. char与short型数据自动转换成int型;
  3. int型与double型数据运算,直接将int型转换成double型
  4. int型与unsigned型数据、直接将int型转换成unsigned型;
  5. int型与long型数据,直接将int型转换成long型。

如此等等,总之是由低级向高级型转换。对于图中列出的自动类型转换,不要错误地理解为先将char型或short型转换成int型,再转换成unsigned型,再转换成long型,直至double型。例如,有如下定义:

  1. char ch='a’
  2. int i=13:
  3. float x=3.65;
  4. double y=7.528e-6;
复制代码

若表达式为

  1. i+ch+x*y
复制代码

则表达式的类型转换是这样进行的:

先将ch转换成int型,计算i+ch,由于ch=‘a’,而‘a’的ASCH码值为97,故计算结果为110,类型为int型。再将x转换成double型,计算x*y,结果为double类型。最后将i+ch的值110转换成double型,表达式的值最后为double类型。

二、赋值转换

如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。转换的基本原则如下。

  1. 将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中
  2. 将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如x为整型变量,执行“x=4.25”时,取值为x=4。
  3. 同类型的短数据赋值给长变量,自动转换是正确的,例如,char和short型数据给int型变量赋值。
  4. 同类型的长数据给短变量赋值可能出错。例如,当unsigned int型的值超过了int变量的取值范围,赋值会出错
    例如:unsigned int 变量给int变量赋值出错
  1. #include <stdio.h>
  2. #include<windows.h>
  3. void main()
  4. {
  5. unsigned int l= 4294967295 ;/*将最大的无符号整型数赋给变量1*/
  6. int a;
  7. a=l;/*将l的值赋给变量a*/
  8. printf("%12d\n",a);/*输出变量a的值*/
  9. system("pause");
  10. }
复制代码

输出结果为:

  1. -1
复制代码

“l= 4294967295 ”赋值给int型变量a,a的值却是-1。这是因为a是有符号数,最高位是符号位,为1表示该数是负数。
无符号整型数4294967295的32位二进制位都是1,而有符号int型-1用32位全1的二进制位表示。

  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include<math.h>
  4. void main(){
  5. char ch='A';//定义字符型变量,并赋初值‘A’
  6. int a,b=3,c;//定义整型变量,并给变量b赋初值3
  7. float x1,x2=2.5;//定义单精度浮点型变量
  8. a=ch;//将字符型变量ch的值'A'赋给整型变量a
  9. x1=a;
  10. c=x2;//x2的值2.5赋给整型变量c
  11. printf("%4c,%4d,%6.2f,%4d\n", ch,a,x1,c);//输出变量ch、a、x1和c的值getchar();
  12. }
复制代码

输出结果为:

  1. A 65 65.00 2
复制代码

第一个输出数据是字符变量ch的值字符’A’;第二个输出数据是整型变量a的值65,字符’A’的ASCII码转换成32位的整型数据;第三个输出数据是实型变量xl的值65.00,由int型变量a的值65自动转换成float类型;第四个数据是整型变量c的值,由实型变量x2的值2.5自动转换成整型数2。

三、强制类型转换

可以利用强制类型转换运算符将一个表达式转换成所需类型。如:

  1. (double)x/*将x转换成double型*/
  2. (int)(a+b)/*强制将a+b的值转换成整型*/
  3. (float)(10%3)/*将10%3的值转换成float型*/
复制代码

强制类型转换的一般形式为:
(类型名)(表达式)
例如:

  1. int a=7,b=2;
  2. float y1,y2;
  3. float y1=a/b;/*y1的值a/b为3.0*/
  4. y2=(float)a/b;/*y2的值为3.5,float将a进行强制转换为实型,b也随之自动转换为实型*/
复制代码

(int)(x+y)和(int)x+y强制类型转换的对象是不同的。(int)(x+y)是对x+y进行强制类型转换;而(int)x+y则只对x进行强制类型转换。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行