您的位置:首页 > 编程语言 > C语言/C++

C语言入门基础--数据类型(基本数据类型)、类型转换(自动转换、强制转换)

2020-04-24 07:44 811 查看

数据类型

数据类型就是用来声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储在内存中占用的空间。

数据类型分为
基本数据类型/算数类型:数值类型(整数类型,浮点型),字符型char
构造数据类型:数组、结构体、共用体、枚举
指针类型
void类型(空类型)void

基本数据类型

我们常用的数字有整数和小数。所以基本数据类型类型又分为了整数类型即整型(当然这里的整型不是韩国的整形)和浮点类型即浮点型;

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

整型

数据类型 占用大小
short 短整型 2 字节 取值范围:-32,768 到 32,767
int 整型 【常用】 2或4个字节(一般都占用2个字节) 取值范围:-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
long 长整型 4 字节 取值范围:-2,147,483,648 到 2,147,483,647

其实char也是int类型,在计算机中,字符也是通过对照ACILL表的int数值转换的。
想知道ACILL表是啥自己百度

字符型

数据类型 占用大小
char 字符型**【常用】** 1字节 取值范围:(-128 到 127 或 0 到 255)

因为-128 到 127 或 0 到 255也在int【-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 】的取值范围之内,所以在小于127大于-128的范围里的时候 int可以和char类型相互转换对应的字符

浮点类型

数据类型 占用大小
float 单精度浮点 【常用】 4 字节 取值范围(1.2E-38 到 3.4E+38 )6 位小数
double 双精度浮点 【常用】 8 字节 取值范围 (2.3E-308 到 1.7E+308 )15 位小数
long double 16 字节 取值范围(3.4E-4932 到 1.1E+4932 )19 位小数

计算某个变量在特定平台上的准确大小

使用sizefof运算符

#include <stdio.h>
#include <limits.h>

int main()
{
//表达式 sizeof(type) 得到对象或类型的存储字节大小。
printf("int 存储大小 : %lu \n", sizeof(int));
//%lu 为 32 位无符号整数

return 0;
}

类型转换

自动类型转换

C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;

int i = 5.5;
/*这里的5.5默认是double类型,
通过C的自动转换机制,会摄取掉小数部分,只保留整数部分*/

自动转换规则:
浮点数赋给整型,该浮点数小数被舍去; 例:int a = 1.2; //这里的.2会被舍去 只会保留整数部分
整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中; 例 float b = 5; //这里的 5 会被转换成5.0 作为浮点型存储在内存里

强制类型转换

使用(),在括号里填写需要转换的类型
使用基本数据类型的时候注意,从大范围强制转换为小范围会存在内存溢出的现象

#include <stdio.h>
int main () {
float f,x=3.6,y=5.2;
int i=4,a,b;
a=x+y;
b=(int)(x+y);//(x+y)是浮点型 这里会强制转换为int型
f=10/i;
printf("a=%d,b=%d,f=%f,x=%f\n",a,b,f,x);

return 0 ;
}

C中的“布尔类型”

在C语言里,是没有bool类型的,所以 C 语言判断真假时以 0 为假,非 0 为真(一般用1)

C99 提供了 _Bool 型,所以布尔类型可以声明为 _Bool flag。
_Bool 依然仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1,非 0 的值都会被存储为 1。
C99还提供了一个头文件 <stdbool.h> 定义了 bool 代表 _Bool,true 代表 1,false 代表 0。
只要导入 stdbool.h ,就能非常方便的操作布尔类型了

#include <stdio.h>
//导入 stdbool.h 来使用布尔类型
#include <stdbool.h>
//计算n!,n的值在main中定义
int main ()
{
int n = 10;    //计算叠乘数
int sum = 1; //用来存放叠乘的结果
bool flag = false;    //叠乘标记

int num = n;    //循环次数
while( !flag )
{
sum = sum * (num--);
//当num=1时结束循环
if( num == 1)
{
flag = true;
}
}
printf ("%d的叠乘值为 %d \n", n, sum);
return 0;

}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
我最爱吃鱼香茄子 发布了3 篇原创文章 · 获赞 1 · 访问量 569 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐