1.const
在 C 语言中, const 关键字用于定义一个常量。当你使用 const 声明一个变量时,意味着这个变量的值在初始化后不能被修改。这有助于防止程序中意外改变这个变量的值,同时也使得代码更易于理解,因为常量名通常能直观地表达其代表的含义。
const :常量修饰符,声明后面的变量为一个常量。
使用常量而不是直接使用字面量(如 3.14159265 )的好处是,如果你需要在程序的多个地方使用圆周率,你可以统一使用 pi 这个常量。这样,如果未来需要修改圆周率的值,你只需要在声明处修改一次即可,而不需要在程序的每个使用处都进行修改。此外,使用常量也有助于代码的维护和可读性。
2.双/单精度浮点变量
①双精度浮点数(Double Precision Floating Point):
数据类型: double
存储大小:通常占用8字节(64位)
精度:提供大约15到16位有效数字
范围:非常大,可以表示非常大或非常小的数
②单精度浮点数(Single Precision Floating Point):
数据类型: float
存储大小:通常占用4字节(32位)
精度:提供大约7位有效数字
范围:相对较小,但仍足以覆盖大多数日常应用
★示例
以下是在 C 语言中声明单精度和双精度浮点变量的示例:
float singlePrecision = 3.14f; // 'f' 表示这是一个单精度浮点数字面量
double doublePrecision = 3.14; // 默认为双精度浮点数字面量
在这个示例中, singlePrecision 是一个单精度浮点变量,而 doublePrecision 是一个双精度浮点变量。注意,在声明单精度浮点数时,通常在数字后面加上字母 f 来表示这是一个单精度字面量。
★选择
选择使用单精度还是双精度浮点数取决于你的应用需求:
如果你需要较高的精度和较大的数值范围,使用双精度浮点数( double )。
如果你对内存使用有限制,或者需要处理大量的浮点数运算,且精度要求不是很高,可以考虑使用单精度浮点数( float )。
在进行科学计算或工程应用时,双精度通常更受欢迎,因为它提供了更高的精度。然而,在图形处理和游戏开发等领域,单精度浮点数由于其较小的内存占用和较快的处理速度,可能会更受青睐。
3.符号位
在计算机科学中,符号位(Sign Bit)是指用于表示一个数的正负的二进制位。在二进制数的表示中,符号位通常是最高位(最左边的位),它的值决定了整个数值的符号:
0:表示该数是正数或零。
1:表示该数是负数。
符号位的使用方法取决于数值的表示方式。以下是几种常见的数值表示方法:
①原码(True Form):
在原码表示法中,最左边的位用作符号位。剩下的位表示数值本身。
例如,5的原码表示为 00000101 (假设使用5位),而-5的原码表示为 10000101 。
②反码(One's Complement):
在反码表示法中,正数的符号位为0,负数的符号位为1。要得到一个数的反码,需要将正数的反码取反(即按位取反)并在末尾加0。
例如,5的反码表示为 00000101 ,而-5的反码表示为 11111010 。
③补码(Two's Complement):
补码是现代计算机中最常用的表示法。在补码表示法中,正数的补码与其原码相同,负数的补码是在其反码的基础上加1。
例如,5的补码表示为 00000101 ,而-5的补码表示为 11111011 。
补码的主要优点是简化了加法和减法的硬件实现,因为减去一个数等于加上它的补码。
符号位的使用对于整数和浮点数都是类似的,但在浮点数的表示中(如IEEE 754标准),符号位的使用略有不同。在单精度(32位)和双精度(64位)浮点数中:
符号位通常是最高位。
剩下的位用于表示指数和尾数(或称为有效数字)。
例如,在64位双精度浮点数中,第1位是符号位,接下来的11位用于表示指数,最后的52位用于表示尾数。
符号位的正确处理对于计算机中的算术运算至关重要,它确保了正负数能够被正确地表示和处理。
4.%lf与%d
在 C 语言中, %lf 和 %d 是两种不同类型的格式说明符,用于 printf 、 scanf 等输入/输出函数中,它们分别对应不同的数据类型:
①%lf :
这个格式说明符用于读取或写入 double 类型的浮点数。
l 在格式说明符中表示长整型(long),用于 double 类型时,它指示相应的参数应该是 double 类型的值。
例如,在 printf 函数中使用 %lf 可以打印一个双精度浮点数:double num = 3.14159;
printf("The value is: %lf\n", num);
在 scanf 函数中使用 %lf 可以从标准输入读取一个双精度浮点数:double num;
scanf("%lf", &num);
②%d :
这个格式说明符用于读取或写入 int 类型的整数。
d 代表"decimal",用于指示相应的参数应该是 int 类型的值。
例如,在 printf 函数中使用 %d 可以打印一个整数:int num = 42;
printf("The number is: %d\n", num);
在 scanf 函数中使用 %d 可以从标准输入读取一个整数:int num;
scanf("%d", &num);
总结来说, %lf 和 %d 的主要区别在于它们处理的数据类型不同: %lf 用于双精度浮点数,而 %d 用于整数。正确使用这些格式说明符可以确保程序能够正确地读取和输出不同类型的数据。
5.ASCII码
ASCII码(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
ASCII码使用8位二进制数组合(正好一个字节)来表示0到255共256种可能的字符。
前128个字符是标准ASCII码,表示所有的大小写字母、数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。
后128个字符是扩展ASCII码,一般用来表示特殊符号、外来语字母和图形符号。
6.字符型常量
字符型常量是由一对单引号括起来的一个字符。字符常量的表示方法有两种:普通字符和转义字符。
普通字符就是单引号将一个单字符括起来。例如:'A'、'6'、'$'、';'、 '>'、'G'、'?'等等。单引号只是一对定界符,在普通字符表示当中只能包括一个字符。
由于字符'A'的ASCII码为十进制数65,用八进制表示是0101,用十六进制表示是0x41,所以字符'\101'和'\X41'都表示字符'A'。用这种方法可以表示任何字符。例如'\141'表示字符'a'。再例如'\0'、'\000'和'\x00'都代表的是ASCII码为0的控制字符,即空字符。空字符被用来作为字符串结束的标记。
7.字符型数据在内存中的表示
字符型数据在内存中是以整型数据形式存储的。举例来说字符'A'在内存中占一个字节,存储的是整型数据65(字符'A'的ASCII码),也就是说字符型数据是一个字节的整数。
所有的大写英文字母的ASCII码比它们的小写形式小32,也就是说:'A'+32的值是97,也就是'a';'B'-32的值是66,也就是'b'。
字符型数据和整型数据是可以通用、可以混合运算。字符型数据可以当做整型数据来使用,整型数据也可以当做字符型数据来使用。
语句char a;的功能是定义字符型变量;
语句int n;的功能是定义整型变量。
语句scanf("%c%d",&a,&n);的功能是输入一个字符和整数,赋值给变量a和n。
其中%c是字符型格式说明符,在这里指输入一个字符。
语句printf("%d,%d\n",a,n);的功能是输出两个以逗号分隔的整数和回车。
8.字符串常量
字符串常量是以双引号括起来的一串字符序列。例如, "This is a c program."、"ABC"、"I LOVE C"或""(空串)等。其中双引号为字符串的定界符,不属于字符串的内容。
字符串常量在内存中的某个起始存储单元开始依次存储各个字符(实际存储的是ASCII码),并在最末字符的下一个字节位置额外存储一个空字符'\O',表示字符串结束。
所以,字符串数据在内存中存储在一块连续的地址空间中,所占内存空间长度为其实际字符个数加1。例如,字符串"CHINA"在内存中所占用的存储空间是6个字节。