常量就是其值在程序运行过程中不可以改变的量。常量可以分为三大类:数值型常量(包括整型常量和实型常量)、字符型常量、符号常量。
一、整型常量
整型常量就是直接使用的整型常数。整型常量可以是双长整型、长整型、短整型、符号整型和无符号整型。
取值范围参考:
C语言各数据类型所占字节数zhuanlan.zhihu.com
在编写整型常量时,可以在常量的后面加上符号LL、L或者U进行修饰。LL表示该常量是双长整型,L表示该常量是长整型,U表示该常量为无符号整型,LL、L和U可以使用大写,可以使用小写。
整型常量可以通过三种形式进行表达,分别为八进制形式、十进制形式、十六进制形式。
1. 八进制整数
要使得使用的数据表达形式是八进制,需要在常数前加上0进行修饰,八进制所包含的数字是0~7。
2. 十进制整数
十进制是不需要在其前面添加前缀的,十进制中所包含的数字为0~9。
3. 十六进制整数
常量前面使用0x或0X作为前缀,表示该常量是用十六进制进行表示的。十六进制中包含数字0~9以及字母A~F,其中字母A~F可以使用大写形式,也可以使用小写形式。
这些整数都是以二进制的方式存放在计算机的内存之中,其数值是以补码的形式进行表示的。一个正数的补码与其原码的形式相同,一个负数的补码是将该数绝对值的二进制形式按位取反再加1。
对于有符号整数,其在内存中存放的最左边一位表示符号位,如果该位为0,则说明该数为正;若为1,则说明该数为负。
二进制的原码、反码、补码zhuanlan.zhihu.com
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("长整形常量:%ldn", 1000L); /*L表示长整形*/
printf("双长整形常量:%lldn", 1000LL); /*LL表示长整形*/
printf("无符号整形常量:%un", 500U); /*U表示无符号整形*/
printf("八进制整数:%o,转为十进制为:%dn", 0123, 0123); /*在常数前面加上一个0来代表八进制*/
printf("十进制整数:%dn", 123);
printf("十六进制整数:%x,转为十进制为:%dn", 0x3ba4, 0x3ba4); /*加上前缀0x表示常量为十六进制*/
return EXIT_SUCCESS;
}
运行结果:
整型常量
源码地址:https://github.com/Hyacinth-fjk/CombinedLanguageIntroduction/blob/master/3.C%E8%AF%AD%E8%A8%80%E5%B8%B8%E9%87%8F/integer_constants.c
二、实型常量
实型常量也称为浮点型,由整数部分和小数部分组成,并用十进制的小数点进行分隔。表示实型的方式有科学计数方式和指数方式两种。
1. 科学计数方式
科学计数方式就是使用十进制的小数方式描述实型。
2. 指数方式
有时,实型非常大或者非常小,使用科学计数方式是不利于观察的。这时,可以用指数方式显示实型常量。其中,
使用字母e或者E进行指数显示,如45e2表示的就是4500,而45e-2表示的就是0.45。
在编写实型常量时,可以在常量后面加上符号F或者L进行修饰,F表示该常量是float单精度类型,L表示该常量为long double长双精度类型。
如果不在后面加上后缀,那么默认状态下,实型类型常量为double双精度类型。
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
int main(void)
{
printf("科学计数方式:%fn", 123.45); /*科学计数法*/
printf("指数方式:%en", 5.458e-1); /*指数方式显示*/
printf("单精度类型:%g,精度为:%dn", 1.2345e2F, FLT_DIG); /*单精度类型*/
printf("双精度类型:%lg,精度为:%dn", 1.2345e2, DBL_DIG); /*双精度类型*/
printf("长双精度类型:%Lg,精度为:%dn", 5.458e-1L, LDBL_DIG); /*长双精度类型*/
return EXIT_SUCCESS;
}
运行结果:
实型常量
源码地址:https://github.com/Hyacinth-fjk/CombinedLanguageIntroduction/blob/master/3.C%E8%AF%AD%E8%A8%80%E5%B8%B8%E9%87%8F/real_constant.c
三、字符常量
字符型常量与之前所介绍的常量有所不同,即要对其字符型常量使用指定的定界符进行限制。字符型常量可以分成两种:一种是字符常量,另一种是字符串常量。
1. 字符常量
使用单引号括起一个字符,这种形式就是字符常量。在这里,需要注意一下几点:
(1)字符常量只能包括一个字符;
(2)字符常量是区分大小写的;
(3)''这对单引号代表着定界符,不属于字符常量中的一部分。
2. 字符串常量
字符串常量是用一组双引号括起来的若干字符序列。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。
在C语言中存储字符串常量时,系统会在字符串的末尾自动加一个“0”,作为字符串的结束标志。
在程序中编写字符串常量时,不必在字符串的结尾处加上“0”结束字符,系统会自动添加结束字符。
3. 字符常量和字符串常量区别
(1)定界符的使用不同。字符常量使用的是单引号,而字符串常量使用的是双引号;
(2)长度不同。字符常量只能有一个字符,也就是说字符常量的长度就是1。字符串常量的长度可以是0,也可以是任意数,即使字符串常量中的字符数量只有一个,长度也不是1。
(3)存储的方式不同,在字符常量中存储的是字符的ASCII码值;而字符串常量中,不仅要存储有效的字符,还要存储结尾处的结束标志“0”。
在C语言中,所使用的字符被一一映射到一个表中,这个表称为ASCII码表。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
putchar('H'); /*输出字符常量H*/
putchar('e'); /*输出字符常量e*/
putchar('l'); /*输出字符常量l*/
putchar('o'); /*输出字符常量o*/
putchar('n'); /*进行换行*/
printf("What a nice day!n"); /*输出字符串*/
return EXIT_SUCCESS;
}
运行结果:
字符型常量
源码地址:https://github.com/Hyacinth-fjk/CombinedLanguageIntroduction/blob/master/3.C%E8%AF%AD%E8%A8%80%E5%B8%B8%E9%87%8F/character_constant.c
四、转义字符
转义符号在字符常量中是一种特殊的字符,转义字符是以反斜杠“”开头的字符,后面跟一个或几个字符。常用的转义字符及其含义——
- a 响铃;
- b 退格;
- f 换页;
- n 换行;
- r 回车;
- t 水平制表;
- v 垂直制表;
- 代表一个反斜杠字符“”;
- ’ 代表一个单引号字符;
- ? 代表一个问号;
- 0 空字符;
- ddd 1到3位八进制数所代表的任意字符;
- xhh 1到2位十六进制所代表的任意字符。
五、符号常量
使用符号名代表固定的常量值,使用的符号名就称之为符号常量。使用符号常量的好处在于可以为编程和阅读带来方便。
#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("圆的面积为:%lfn", result); /*显示结果*/
return EXIT_SUCCESS; /*程序结束*/
}
运行结果:
符号常量
源码地址:https://github.com/Hyacinth-fjk/CombinedLanguageIntroduction/blob/master/3.C%E8%AF%AD%E8%A8%80%E5%B8%B8%E9%87%8F/symbolic_constants.c
C语言常量https://www.zhihu.com/video/1193945075477016576
视频下载地址:https://pan.baidu.com/s/1Tp1NiPZwu3q6FL0q6toXwQ