惧留孙网

juliusun.com

在线教程 > C语言教程 > 默认类型及算术运算

默认类型及算术运算

第 8/50 节 冥河C语言教程


变量定义时可以指定类型,但是常量在书写时,并不一定都带有类型。常量默认类型如下表:

说明例子默认类型
不带有小数的数字 0 , 1 , 99 int
带有小数的数字 0.0 , 4.1 double
单引号引起的字符 'a' , '0' int (不要误以为是char)
双引号引起的多个字符 "Hello world" , "" , "a" , "12345" char 数组(以后介绍)

如97默认是int类型,'a'是char类型,0.5默认是float类型。

如果书写代码时,不是默认的常量类型,可以在常量后面加相应的后缀,规则如下表:

类型后缀例子备注
long 小写l或大写L 3l , 0l , 3L , 0L 注意,数字必须是不带有小数的。否则按double处理
float 小写f或大写F 3f , 0.0f ,3F , 0.0F
double 小写l或大写L 3.0l , 0.0l , 3.1L , 0.0L 数字必须带有小数,否则按long类型处理

如10默认是int类型,而10L或10l是long类型,10.0或10f或10F是float类型,10.0l或10.0L是double类型。

赋值时不同类型可以强制转换,强制转换格式如:

(类型)值

如:


  1. float f = (float)2;
  2. printf("%d",sizeof( (double)'a' )); //输出8,强制将char类型转换成double类型

再介绍数据算术运算。

两种相同类型的变量或变量做算术运算时,结果仍然是这种类型,再补充下,char类型同样可以做算术运算。当默认的常量类型和声明的变量类型不同,且赋值时,系统自动将常量转换成变量类型,如float f = 0;编译器自动会认为是float f = 0.0;

需要注意,整数和整数之间进行算术运算,结果仍然为整数,例:


  1. float f = 1 / 2; /*当被赋值为表达式时,系统先计算表达式的结果,然后将结果赋值给变量。1和2默认是int类型,
  2. 结果仍然为int类型,1 / 2按小数算是0.5,但是int只会保留小数部分,所以f值为0
  3. 计算结果为0,相当于float f = 0;由于0默认是int,f变量是float,编译器自动把0扩展为0.0 */
  4. printf("%f",f); //输出结果为小数的0,不要误以为是0.5

相同类型的小数进行运算时,结果仍然是小数,没什么特别说明的。

重点介绍下不同类型的数值之间的运算。

32位环境为例,不同类型数值进行运算时,系统将其隐式转换成相同类型,再运行运算。规则如下

  1、如果算术运算符两边至少有一方为float或double类型,则将两边均转换成double类型再计算。然后两边如果存在doule则结果为double,否则结果再转换成float

  2、如果算术运算符两边均为整数类型(包括char)没有float和double类型,则将两边均转换成int类型再进行运算,且结果仍然是int

转换成相同类型运算后,结果会再根据双方类型转化成相应类型。

举例说明:


  1. printf("%d",sizeof(3.0 - 'a'));  //输出8,3.0默认是double类型,符合第一条规则,结果是double类型,占8个字节
  2. printf("%d",sizeof(3 - 'a'));  //输出4,两边均为整型,无float或double类型,符合第二条,结果为int类型,占用4个字节大小

有了上面的原则,要正确计算1/2的值就好办了,写成如下:


  1. float f = 1.0 / 2; //1或2只要有一个写成float或double类型的形式即可,小数会保留。
  2. //也可写成1f/2、1F/2、(float)1/2等,或对2进行转换
  3. printf("%f",f); //输出结果为小数的0,不要误以为是0.5
作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的