欢迎光临散文网 会员登陆 & 注册

P2数据类型(基本数据类型)

2023-08-22 16:33 作者:创世十鹰  | 我要投稿

布尔类型:boolean 

基本介绍:

1) C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真 [案例

2) 但这种做法不直观,所以我们可以借助C语言的宏定义 。 

3) C语言标准(C99)提供了_Bool 型,_Bool仍是整数类型,但与一般整型不同的是, _Bool变量只能赋值为01,非0的值都会被存储为1C99还提供了一个头文件 <stdbool.h> 定义了bool代表_Booltrue代表1false代表0。只要导入 stdbool.h ,就 能方便的操作布尔类型了 , 比如 bool flag = false;[了解

条件控制语句; if 

循环控制语句; while ...

自动类型转换

介绍:

当C程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型, 这个就是自动类型转换。

数据类型按精度(容量)大小排序为


案例演示:

演示一下基本数据类型转换的基本情况。

自动类型转换细节说明:

1) 有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度最大的那种数据类型, 然后再进行计算(如int型和short型运算时,先把short转成int型后再进行运算)。 

2) 若两种类型的字节数不同,转换成字节数大的类型,若两种类型的字节数相同,且一种有符 号,一种无符号,则转换成无符号类型 

3) 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型将转换为左边的类型, 如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部 分按四舍五入向前舍入。

强制类型转换 

介绍:将精度高的数据类型转换为精度小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度 降低或溢出,格外要注意。 

强制类型转换一般格式如下: (类型名) 表达式 什么是表达式: 任何有值都可以称为表达式,比如 1+ 2, int num = 2;  这种强制类型转换操作并不改变操作数本身

案例演示 void main() {

double d1 = 156.89; 

int num1 = (int)d1;  

}


强制类型转换细节说明:

1) 当进行数据的从 精度高——>精度低,就需要使用到强制转换 

2) 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

基本数据类型转换-练习题 :

判断是编译是否会通过? 

char c = 'a';  

int i = 5;  

float d = .314F;  

double result = c+i+d; // c+i+d 类型是 float -> double ok


我的源码及注释:


#include <stdio.h>

//使用宏定义定义布尔类型(自己定义的布尔类型)

#define BOOL int

#define TURE 1

#define FALSE 0


void main(){

int isPass = -1;


//定义一个布尔变量

BOOL isOK = TURE;//等价 int isOK = 1;


if(isPass){//0表示真,非0表示假

printf("通过考试\n");

}


if(isOK){

printf("OKOKOK");

}


getchar();

}


/*

1.C语言标准(C89)没有定义布尔类型,所以C语言判断真假时,以0为假,非0为真。

2.但是这种做法不直观,所以我们可以借助C语言的宏定义。

3.C语言标准(C99)提供了_Bool型,_Bool仍然是整数类型,但与一般整数不同的是,_Bool变量只能赋值为0或1,

非0都会被存储为1,C99还提供了一个头文件<stdbool.h> 定义了bool代表_Bool,true代表1,false代表0,

只要导入stdbool.h头文件,就可以方便操作布尔类型,比如 bool flag = true;【vs2010是c89,所以不行哦,c99才可以】


布尔类型常用在 条件控制语句中、循环控制语句中

*/

/*自动类型转换

精度从低到高顺序:short-->int-->unsigned int-->long-->unsigned long-->float-->double-->long double


自动转换规则:char,short-->int-->unsigned int-->long-->double<--float

//说明:double在这里是最高精度,相同线上都可以转换


细节说明:

1.多种类型的数据混合运算,系统首先自动将 所有数据转换成精度最大的那种数据类型,然后再计算。

2.若两种类型的字节数不同,转换成字节数大的类型,字节数相同(且一种有符号,一种无符号),则转换成无符号类型。

3.赋值运算中,右边数据比左边长,将会丢失一部分数据,这样会降低精度(比如double-->float)

*/


#include <stdio.h>

void main(){

char c1 = 'a';

int num1 = c1;

double d1 = num1;


short s1 = 10;

int num2 = 20;

int num3 = s1 + num2;


float f1 = 3.456f;

double d2 = 6.6699336969;

f1 = d2;//会出现精度损失(double-->float)

printf("f1=%.10f",f1);//f1=6.6699337959,精度损失了

getchar();

}

/*强制类型转换

1.高精度转换为低精度会有个 warning警告,提示有精度损失

2.精度高的数据类型 转换成 精度低的数据类型,需要加上强制类型转换符(然后就不会有warning警告了),

但可能造成精度降低或溢出,要格外注意。

3.强制类型转换一般格式如下:  (类型名) 表达式

【这种强制类型转换操作 并不会改变操作数本身。也就是说,转换后只是 返回转化后的结果 并赋值给某个变量,

原来的值和类型没有任何变化】

*/


//warning是可以运行的,但是在项目中,是不行的,不能要warning


#include <stdio.h>

void main(){

char c1 = 'a';

int num1 = 333;

double d1 = 666;


//计算会把精度 提高到 数据类型精度最高的类型

//int取整,会把小数部分直接截断(也就是直接丢掉)

int num2 = (int)3.6 * 10 + 8*0.5;//3*10+4.0=34.0(是double类型)-->int类型的34

int num3 = (int)(3.6 * 10 + 8*0.5);//int(3.6*10+4.0)-->int(40.0(double))-->int类型的40


//c1 = d1;//有警告 warning C4244: “=”: 从“double”转换到“char”,可能丢失数据

//强制类型转换

c1 = (char)d1;


printf("num2=%d\n",num2);//输出 num2=34

printf("num3=%d\n",num3);//输出 num3=40


printf("c1=%d\n",c1);//输出 c1=-102

//强制类型类型转换后,本身的值和类型都不会变,其他编程语言一般也是这种情况

printf("d1=%f\n",d1);//输出 d1=666.000000


getchar();

}

P2数据类型(基本数据类型)的评论 (共 条)

分享到微博请遵守国家法律