码迷,mamicode.com
首页 > 编程语言 > 详细

C语言基本数据类型

时间:2019-09-20 18:50:38      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:deb   存在   读取   精度   inf   float   输出   组元   技术   

1.概述

C 语言包含的数据类型如下图所示:

 技术图片

 

 C语言中的基本数据类型有整形、字符型、浮点型:单精度型、双精度型;枚举类型、数组等。

1、整形

整形分为整形常量和整形变量,常量就是我们平时所看到的准确的数字,例如:1、20、333、、、等等,变量则按我的理解是我像内存去申请一个存储空间,告诉内存空间我申请了这个地方用来存放一个整形的数据,但是什么时候放并没有直接确定。一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前、高位在后,例如0x12345678在内存中的存储如下。

定义:用int关键字,举例如下: 

 技术图片

 

 在C语言中基本的整形变量标识符是int,在32位机器中一个int型数据使用32位也就是4个字节进行存储。

 技术图片

 

 2、字符型

字符型在其本质上就是整形,我们在C语言中使用char表示一个字符型,他占用一个字符的存储空间,字符型在存储时其内部存储的依旧是二进制数据,当我们读出时将会得到一个整形数据,而我们输出时会得到一个字符是因为我们人为的定义了一个对照表,这个表规定字符a的数值就是97,所以当我们遇到97时我们有两种读出方式,第一种以整数形式读出就是97,另一种就是以字符型读出,使用%c指定读出形式,则对照表则为a。

 技术图片

 

 3、浮点型

除了整形还有另一类很重要的基本数据类型,那就是实型。我们在学习数学时不仅使用整数,更多的时候则是使用小数,那么浮点数在内存中饭的存储与整数在内存中的存储有什么不一样的地方吗?其实,单从数据存储上看,都是2进制并没有任何不同,但不同的是我们加在其上的表示规则与读取规则。无论单精度还是双精度的浮点数在内存中我们对于一个浮点数都分为三个部分:

1、符号位:0代表正 1代表负;

2、指数位:用于存储科学技术法中的指数; 

3、尾数位:存储尾数部分

3.1 单精度

float:系统的基本浮点类型。至少能精确表示6位有效数字。

我们在C语言中使用一个float类型表示一个单精度的浮点类型,一个float类型占用4个字节的存储位,其中最高位为符号位,紧接着8位为指数位,剩下的23位为尾数位,我们使用%f作为其格式说明符,而且float一般精确到小数位后6位,即保证6位有效。

3.2 双精度

double:范围(可能)更大的浮点类型。能表示比float类型更多的有效数字以及更大的指数。 

long double:范围(可能)更大的浮点类型。能表示比double类型更多的有效数字以及更大的指数。我们在C语言中使用一个double类型表示一个双精度的浮点类型,一个double类型占用8个字节的存储位, 最高位为符号位,紧接着8位为指数位,剩下的52位为尾数位,我们使用%lf作为其格式说明符,而且double类型一般精确到小数位后12位,即保证12位有效。

4 指针

指针?什么是指针?从根本上看,指针是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型的变量的值是整数,指针变量的值地址。在C语言中,指针有许多用法。假设一个指针变量名是ptr,可以编写如下语句:

 技术图片

 

对于这条语句,我们就可以说ptr“指向”pooh。ptr和&pooh的区别是ptr是变量,而&pooh是常量。或者,ptr是可修改的左值,而&pooh是右值。还可以把ptr指向别处:ptr = &bah; //把ptr指向bah,而不是pooh。现在ptr的值是bah的地址。要创建指针变量,先要声明指针变量的类型。

5 数组

数组是按照顺序存储的一系列类型相同的值,如10个char类型的字符或15个int类型的值。整个数组有一个数组名,通过整数下标访问数组中单独的项或元素。例如:以下声明:

float debts[20];声明debts是一个内容20个元素的数组,每个元素都可以存储float类型的值。数组的第一个元素是debts[0],第2个元素是debts[1],以此类推,直到debts[19]。注意,数组元素的编号从0开始,不是从1开始。可以给每个元素赋float类型的值。例如,可以这样写:debts[5] = 32.54;debts[6] = 1.2e + 21;实际上,使用数组元素和使用同类型的变量一样。例如,可以这样把值读入指定的元素中:

scanf("%f",&debts[4]);//把一个值读入数组的第5个元素这里要注意一个潜在的陷阱:考虑到影响执行的速度,C编译器不会检查数组的下标是否正确。下面的代码,其实都不正确:debts[20] = 88.32;//该数组元素不存在!debts[33] = 828.12;//该数组元素不存在!编译器不会查找这样的错误。当运行程序时,这会导致数据被放置在已被其他数据占用的地方,可能会破坏程序的结果甚至导致程序异常中断。

6 复数和虚数类型(因为用的不多,所以这里几乎省略)

注意: char类型肯定是1字节,因为C把char类型的长度定义为1个字节。所以在char类型长为16位,double类型长为64位的系统中,sizeof将报告double类型有4字节长。好了,简单的数据类型介绍我们就到这里了,希望能帮助大家理解、入门。笔记只是辅助,更多的还是需要大家跟着徐老湿一起学习,互动交流。最后预祝小伙伴们学业有成!

更多干货笔记关注微信公众号 : 老九学堂

C语言基本数据类型

标签:deb   存在   读取   精度   inf   float   输出   组元   技术   

原文地址:https://www.cnblogs.com/ljxt/p/11558626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!