目录
1.数值型变量
(1)整型常量
(2)实型常量
2.字符型常量
(1)字符常量
(2) 字符串常量
3. ASCII表
4. 转义符号
5.符号常量
6. 整型变量
(1)有符号基本整型
(2)无符号基本整型
(3)有符号短整型
(4)无符号短整型
(5)有符号长整型
(6)无符号长整型
7. 实型变量
(1)单精度类型
(2)双精度类型
(3)长双精度类型
8. 字符型变量
9.数值型和字符型数据的字节数和数值范围
1.数值型变量
(1)整型常量
整型常量就是直接使用的整型常数,如123、-456等。整型常量可以是长整型、短整型、符号整型和无符号整型。
1)无符号短整型的取值范围是0~65535,有符号短整型的取值范围是-32768~+32767,这些都是16位整型常量的范围。
2)如果整型是32位的,那么无符号形式的取值范围是0~4294967295,有符号形式的取值范围是-2147483648~+2147483647。但是整型如果是16位的,就与无符号短整型的范围相同。
注意:不同的编译器,整型的取值范围是不一样的。在字长为16位的计算机中,整型就为16位;在字长为32位的计算机中,整型就为32位。
3)长整型是32位的,其取值范围可以参考上面有关整型的描述。
在编写整型常量时,可以在常量的后面加上符号L或者U进行修饰。L表示该常量是长整型,U表示该常量为无符号整型,例如:
注意:表示长整型和无符号整型的后缀字母L和U可以使用大写,也可以使用小写。
整型常量可以通过3种形式进行表达,分别为八进制形式、十进制形式和十六进制形式。
下面分别进行介绍:
a.八进制整数
要使得使用的数据表达形式是八进制,需要在常数前加上0进行修饰。八进制所包含的数
字是0~7。例如:
注意:以下关于八进制的写法是错误的:
b.十进制整数
十进制是不需要在其前面添加前缀的。十进制中所包含的数字为0~9。例如:
这些整型数据都以二进制的方式存放在计算机的内存之中,其数值是以补码的形式进行表示的。一个正数的补码与其原码形式相同,一个负数的补码是将该数绝对值的二进制形式按位取反后再加1。例如,一个十进制数11在内存中的表现形式如图
如果是-11,那么在内存中又是怎样的呢?因为是以补码进行表示,所以负数要先将其绝对值求出;然后进行取反操作,得到取反后的结果。
取反之后还要进行加1操作,这样就得到最终的结果。则为-11在计算机内存中如图
注意:对于有符号整数,其在内存中存放的最左面一位表示符号位,如果该位为0,则说明该数为正;若为1,则说明该数为负。
c. 十六进制整数
常量前面使用0x作为前缀,表示该常量是用十六进制进行表示的。十六进制中包含数字0~9以及字母A~F。例如:
注意1:其中字母A~F可以使用大写形式,也可以使用a~f小写形式。
注意2:以下关于十六进制的写法是错误的:
(2)实型常量
实型也称为浮点型,由整数部分和小数部分组成,并用十进制的小数点进行分隔。表示实数的方式有科学计数方式和指数方式两种。
a.科学计数方式
科学计数方式就是使用十进制的小数方法描述实型,例如:
b.指数方式
有时,实型非常大或者非常小,使用科学计数方式是不利于观察的。这时,可以使用指数方法显示实型常量。其中,使用字母e或者E进行指数显示,如45e2表示的就是4500,而45e-2表示的就是0.45。如上面的SciNum1和SciNum2代表的实型常量,使用指数方式显示这两个实型常量,代码如下:
在编写实型常量时,可以在常量的后面加上符号F或者L进行修饰。F表示该常量是float单精度类型,L表示该常量为long double长双精度类型。例如:
如果不在后面加上后缀,那么在默认状态下,实型常量为double双精度类型。例如:
注意:后缀的大小写是通用的。
2.字符型常量
字符型常量与之前所介绍的常量有所不同,即要对其字符型常量使用指定的定界符进行限制。字符型常量可以分成两种:一种是字符常量,另一种是字符串常量。
(1)字符常量
使用单直撇括起一个字符,这种形式就是字符常量。例如,'A'、'#'、'b'等都是正确的字符常量。在这里,需要注意以下几点:
a.字符常量只能包括一个字符,不能是字符串。例如,'A'是正确的,但是用'AB'来表
示字符常量就是错误的。
b.字符常量是区分大小写的。例如,'A'字符和'a'字符是不一样的,这两个字符代表着
不同的字符常量。
c.' '这对单直撇代表着定界符,不属于字符常量中的一部分。
示例1:字符常量的输出,使用putchar函数将单个字符常量进行输出,使得输出的字符常量形成一个单词Hello并显示在控制台中。
#include<stdio.h>
int main()
{ /*注意字符是单引号*/
putchar('H');/*输出字符常量H*/
putchar('e');/*输出字符常量e*/
putchar('l');/*输出字符常量l*/
putchar('l');/*输出字符常量l*/
putchar('o');/*输出字符常量o*/
putchar('\n');/*换行*/
return 0;
}
运行结果:
(2) 字符串常量
字 符 串 常 量 是 用 一 组 双 引 号 括 起 来 的 若 干 字 符 序 列, 例 如,“Have a good day!”和“beautiful day”即为字符串常量。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。
在C语言中存储字符串常量时,系统会在字符串的末尾自动加一个“\0”,作为字符串的结束标志。例如,字符串“welcome”在内存中的存储形式
注意:在程序中编写字符串常量时,不必在字符串的结尾处加上“\0”结束字符,系统会自动添加结束字符。
示例2:使用printf函数将字符串常量“What a nice day!”在控制台输出显示
#include<stdio.h>
int main()
{
printf("What a nice day!\n");
return 0;
}
运行结果:
字符常量与字符串常量之间有什么差别:
a.定界符的使用不同。字符常量使用的是单直撇,而字符串常量使用的是双引号。
b.长度不同。上面提到过字符常量只能有一个字符,也就是说字符常量的长度就是1。字符串常量的长度可以是0,也可以是任意数。即使字符串常量中的字符数量只有1个,长度也不是1。例如,字符串常量“H”,其长度为2
原因:系统会自动在字符串的尾部添加一个字符串结束字符“\0”,这也就是“H”的长度是2的原因
c. 存储的方式不同,在字符常量中存储的是字符的ASCII码值;而在字符串常量中,不仅要存储有效的字符,还要存储结尾处的结束标志“\0”
3. ASCII表
4. 转义符号
转义符号在字符常量中是一种特殊的字符。转义字符是以反斜杠“\”开头的字符,后面跟一个或几个字符。常用的转义字符及其含义
5.符号常量
例如:一个求解长方体体积的程序,其中长方体的高度是固定的,使用一个符号名代替固定的常量值,这里使用的符号名就称之为符号常量。
示例3:使用符号常量来表示圆周率,在控制台上显示文字提示用户输入数据,该数据是有关圆半径的值。得到用户输入的半径,经过计算得到圆的面积
#include <stdio.h>
#include <stdlib.h>
#define PAI 3.14 /*定义符号变量*/
int main(void)
{
double radius; /*定义半径变量*/
double result; /*定义结果变量*/
printf("请输入圆的半径:"); /*提示*/
scanf_s("%lf", &radius); /*输入数据*/
result = radius * radius * PAI; /*进行计算*/
printf("圆的面积为:%lf\n", result); /*显示结果*/
return 0; /*程序结束*/
}
运行结果:
6. 整型变量
整型变量是用来存储整型数值的变量。整型变量可以分为如表3.4所示的6种类型,其中基本类型的符号使用int关键字,在此基础上可以根据需要加上一些符号进行修饰,如关键字short或long
注意:表格中的[]为可选部分。例如[signed] int,在编写时可以省略signed关键字。
(1)有符号基本整型
有符号基本整型是指signed int型,其值是基本的整型常数。编写时,常将其关键字signed进行省略。有符号基本整型在内存中占4个字节,取值范围是-2147483648~2147483647。注意:通常说到的整型,都是指有符号基本整型int。
定义一个有符号整型变量的方法是在变量前使用关键字int。例如,定义一个整型的变量
iNumber,并为其赋值10的方法如下:
或者在定义变量的同时为其赋值
注意:在编写程序时,程序中用到的所有变量的定义应该放在变量的赋值之前,否则会产生错误。通过下面的两个例子进行对比:
示例4:对有符号基本整型变量的使用
#include <stdio.h>
int main()
{
signed int iNumber;
iNumber = 10;
printf("%d", iNumber);
return 0;
}
运行结果:
(2)无符号基本整型
无符号基本整型使用的关键字是unsigned int,其中的关键字int在编写时可以省略。无符号基本整型在内存中占4个字节,取值范围是0~4294967295。
定义一个无符号基本整型变量的方法是在变量前使用关键字unsigned。例如,要定义一个无符号基本整型的变量iUnsignedNum,并为其赋值10的方法如下:
(3)有符号短整型
有符号短整型使用的关键字是signed short int,其中的关键字signed和int在编写时可以省略。有符号短整型在内存中占两个字节,取值范围是-32768~32767。
定义一个有符号短整型变量的方法是在变量前使用关键字short。例如,要定义一个有符号短整型的变量iShortNum,并为其赋值10的方法如下:
(4)无符号短整型
无符号短整型使用的关键字是unsigned short int,其中的关键字int在编写时可以省略。无符号短整型在内存中占两个字节,取值范围是0~65535。
定义一个无符号短整型变量的方法是在变量前使用关键字unsigned short。例如,要定义一个无符号短整型的变量iUnsignedShtNum,并为其赋值10的方法如下:
(5)有符号长整型
有符号长整型使用的关键字是signed long int,其中的关键字signed和int在编写时可以省略。有符号长整型在内存中占4个字节,取值范围是-2147483648~2147483647。
定义一个有符号长整型变量的方法是在变量前使用关键字long。例如,要定义一个有符号长整型的变量iLongNum,并为其赋值10的方法如下:
(6)无符号长整型
无符号长整型使用的关键字是unsigned long int,其中的关键字int在编写时可以省略。无符号长整型在内存中占4个字节,取值范围是0~4294967295。
定义一个无符号长整型变量的方法是在变量前使用关键字unsigned long。例如,要定义一个无符号长整型的变量iUnsignedLongNum,并为其赋值10的方法如下:
7. 实型变量
实型变量也称为浮点型变量,是指用来存储实型数值的变量,其中实型数值是由整数和小数两部分组成的。实型变量根据实型的精度可以分为单精度类型、双精度类型和长双精度类型3种
(1)单精度类型
单 精 度 类 型 使 用 的 关 键 字 是 float, 它 在 内 存 中 占 4 个 字 节, 取 值 范 围是-3.4×10 -38 ~3.4×10 38 。
定义一个单精度类型变量的方法是在变量前使用关键字float。例如,要定义一个变量fFloatStyle,并为其赋值3.14的方法如下:
示例5:定义一个单精度类型变量,然后为其赋值1.23
#include <stdio.h>
int main()
{
float fFloatStyle;
fFloatStyle = 1.23f;
printf("%f\n", fFloatStyle);
return 0;
}
运行结果:
(2)双精度类型
双 精 度 类 型 使 用 的 关 键 字 是 double, 它 在 内 存 中 占 8 个 字 节, 取 值 范 围是-1.7×10 -308 ~1.7×10 308 。
定义一个双精度类型变量的方法是在变量前使用关键字double。例如,要定义一个变量dDoubleStyle,并为其赋值5.321的方法如下:
示例6:定义一个双精度类型变量,然后为其赋值61.458
#include <stdio.h>
int main()
{
double dDoubleStyle;
dDoubleStyle = 61.458;
printf("%f\n", dDoubleStyle);
return 0;
}
运行结果:
(3)长双精度类型
长双精度类型使用的关键字是long double,它在内存中占8个字节,取值范围是-1.7×10 -308 ~1.7×10 308 。
定义一个双精度类型变量的方法是在变量前使用关键字long double。例如,要定义一个变量fLongDouble,并为其赋值46.257的方法如下:
示例7:定义一个长双精度类型变量,然后为其赋值46.257
#include <stdio.h>
int main()
{
long double fLongDouble;
fLongDouble = 46.257;
printf("%f\n", fLongDouble);
return 0;
}
运行结果:
8. 字符型变量
字符型变量是用来存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。
字符型变量在内存空间中占一个字节,取值范围是-128~127。
定义一个字符型变量的方法是使用关键字char。例如,要定义一个字符型的变量cChar,为其赋值为'a'的方法如下:
注意:字符数据在内存中存储的是字符的ASCII码,即一个无符号整数,其形式与整数的存储形式一样,因此C语言允许字符型数据与整型数据之间通用。例如
从上面的代码中可以看到,首先定义两个字符型变量,在为两个变量进行赋值时,一个变量赋值为'a',而另一个赋值为97。最后显示结果都是字符'a'。
示例8:为定义的字符型变量和整型变量进行不同的赋值,然后通过输出结果观察整型变
量和字符型变量之间的转换
#include <stdio.h>
int main()
{
char cChar1; /*定义字符型变量*/
char cChar2;
int iInt1; /*定义整型变量*/
int iInt2;
cChar1 = 'a';
cChar2 = 97;
iInt1 = 'a';
iInt2 = 97;
printf("%c\n", cChar1);
printf("%c\n", cChar2);
printf("%c\n", iInt1);
printf("%c\n", iInt2);
return 0;
}
运行结果: