C语言入门学习——数据类型(2025.1.7)
一、C语言的数据类型

二、常量与变量
常量:在程序运行过程中,其值不能被改变的量称为常量。
变量:代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,
在程序运行期间,这些值是可以改变的。
标识符:和其他高级语言一样,在C语言中用来对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列统称为标识符(identifier)。简单地说,标识符就是一个名字。
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
对于一些有特殊含义的关键字也不应用作标识符,如下图:

三、整型数据
1.整型常量
整型常量即整常数。在C语言中,整常数可用以下3种形式表示。
(1)十进制整数,如123、-456、4。
(2)八进制整数,以0开头的数是八进制数。如0123表示八进制数123,即(123)8,其值为1×8²+2×8¹+3×8°,等于十进制数83,-011表示八进制数-11,即十进制数-9。
(3)十六进制整数,以0x开头的数是十六进制数。如0x123,代表十六进制数123,即(123)16=1×16²+2×16¹+3×16°=256+32+3=291;-0x12等于十进制数-18。
2.整型变量
(1)整型变量的分类
共8类:int,unsigned int,short,unsigined short,long,unsigned long,long long,unsigned long long
int:完整为signed int,即有符号的int整型,分配的存储空间为4字节,范围为-2^31~2^31-1(即十进制为-2147483648~2147483647,十六进制为0x80000000~0x7FFFFFFF)
unsigned int:即无符号的int整型,分配的存储空间也为4字节,范围0~2^32-1(即十进制为0~4294967295)
short:完整为signed short int,即有符号的短型的int整型,分配的存储空间为2字节,范围为-2^15~2^15-1(即十进制为-32,768~32,767)
unsigined short:完整为unsigned short int,即无符号的短型的int整型,分配的存储空间也为2字节,范围为0~2^16-1(即十进制为-0~65,535)
long:完整为signed long int,即有符号的长型的int整型,分配的存储空间为8字节,范围为-2^15~2^15-1(即十进制为-32,768~32,767)
unsigned long:完整为unsigned long int,即无符号的长型的int整型,分配的存储空间也为8字节,范围为0~2^16-1(即十进制为0~65535)
long long:完整为signed long long int,即有符号的超长型的int整型,分配的存储空间为8字节,范围为-2^15~2^15-1(即十进制为-32,768~32,767)
unsigned long long:完整为unsigned long long int,即无符号的超长型的int整型,分配的存储空间也为8字节,范围为0~2^16-1(即十进制为0~65535)
注意:这里的存储空间均为在Linux x64平台上的存储空间,在Windows平台上long与unsigned long类型的存储空间为4字节,即32位比特。
若所采用的整型变量的范围与实际赋予的常量大小不匹配则会产生整型溢出
(2)整型数据在内存中的存放形式
十进制数转换为二进制采用的方法是辗转相除法,除至商为0时,倒序输出余数。
例:(10)10=(1010)2

八进制的出现是因为在八进制中,0~7刚好可以以3位二进制数的形式完美表达,对照转换表格可以做到快速进行八进制与二进制之间的转换,转换表格如下:

十六进制的出现是因为在十六进制中,0~F刚好可以以4位二进制数的形式完美表达,对照转换表格可以做到快速进行十六进制与二进制之间的转换,转换表格如下:

整型数据一般在内存中占4个字节(32位),故经常采用8位十六进制数,两两一组分别存储在4个字节中。在实际的硬件驱动中采用小端字节序的存储方式,即把低位放前,高位放后。
例:i = 0x075BCD15 在实际存储中是以15 CD 5B 07的形式存储的
图中四块绿色区域即指系统为存储变量i为其划分的4字节空间,并均有专属的地址信息,规定用首个字节的地址表示变量i的地址。该存储空间与地址有分发与收回的特性,即每次运行该程序会重新随机为变量i分配空间与地址,在程序关闭后会收回其存储空间。
负数的存储需要采用补码取反再加一的方式,负数的首位必须为1。
例:int i = -123;
首先将123转换为二进制得(123)10=(0111 1011)2,
然后补码补全32位得0000 0000 0000 0000 0000 0000 0111 1011,
然后全部按位取反得1111 1111 1111 1111 1111 1111 1000 0100,
最后再加上一得1111 1111 1111 1111 1111 1111 1000 0101便是结果,
转换为十六进制得0xFFFFFF85

四、浮点型数据
浮点型数据的本质与int整型数据相同
1.浮点型常量
C语言中的浮点数(floating pointnumber)就是常说的实数(real number)。浮点数有两种表示形式。
(1)十进制小数形式。它由数字和小数点组成(注意必须有小数点)。0.123、123.、123.0、0.0都是十进制小数形式。
(2)指数形式。如123e3或123E3都代表123×10³。但注意字母e(或E)之前必须有数字,且e后面的指数必须为整数,如e3、2.1e3.5、e3、e等都不是合法的指数形式。
2.浮点型变量
(1)浮点型变量的分类
float:完整为signed float,即有符号的单精度浮点型,分配的存储空间为4字节。
double:完整为signed double,即有符号的双精度浮点型,分配的存储空间为8字节。
long double:完整为signed long double,即有符号的长双精度浮点型,分配的存储空间为16字节。并不常用,仅做了解。

(2)浮点型数据在内存中的存放形式
浮点型数据一般在内存中占4个字节(32位)。以float类型来举例,根据IEEE(电气电子工程师学会)的相关规定,32位的存储空间需有符号位:1位,阶码:8位,尾数:23位。
例:
float f;
f = -6.25;
首先由正负符号得,负数首位的符号位为1。
然后将6.25的整数位与小数位分别化为二进制数,其中整数位(6)10=(110)2,
小数位采用辗转相乘法,乘至小数位为0为止,顺序输出余数得(.25)10=(.01)2,最终得到(6.25)10=(110.01)2,

再将结果转化为科学计数法(即指数形式)得1.1001×2²,
将指数2加127得2+127=129,再将结果转换为二进制得(129)10=(1000 0001)2,得到阶码。
剩余部分1.1001,由于所有计算结果的整数位均为1,故统一省略1.得1001,得到尾数,
用000 0000 0000 0000 0000补齐得23位完整尾数。
将符号位,阶码,尾数连在一起得1100 0000 1100 1000 0000 0000 0000 0000,
转换为十六进制得0xC0C80000,
在硬件驱动上按小端字节序存储得00 00 C8 C0。
五、字符型数据
1.字符常量
C语言的字符常量是用单撇号括起来的一个字符。如'a'、'x'、'D'、'?'、'$'等都是字符常量。注意,'a'和'A'是不同的字符常量。
除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以一个字符"\"开头的字符序列。例如,前面已经遇到过的,在printf函数中的“\n”,它代表一个“换行”符。这是一种“控制字符”,在屏幕上是不能显示的,在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示,如下表所示:

2.字符变量
字符型变量用来存放字符常量,它只能放一个字符,即使在一个字符变量中放一个字符串(包括若干字符),也只能存放最后一个字符。
字符变量的定义形式如下:char c1,c2;
它表示cl和c2为字符型变量,各可以放一个字符,因此在本函数中可以用下面语句对c1、c2赋值:
c1 = 'a' , c2 = 'B';
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)