C语言的符号
- C语言的基本符号构成
数字、字母、运算符
特殊符号:_(下划线)、\r(回车)、\n(换行)、\t(tab制表符)
关键字/保留字:C语言预先规定的32个有特殊意义的单词,例如void、return等等
标识符:变量名、函数名、文件名、类型名等等 - 标识符的命名规则
只能由字母、数字和下划线组成
首字符不能为数字
区分大小写
不能使用保留字
变量
- 变量的定义:在程序执行期间其值可以改变的量,必须先定义后使用
- 定义变量的格式:
类型说明符 变量名1,变量名2, .... ,变量名n;
- 变量的属性:变量类型决定变量在内存中的存储单元大小和存储方式
- 变量的初始化:变量可以在定义的时候进行赋值,或者先定义后赋值
int a=b=c=5; 是不正确的,因为这句话等价于定义了a并赋值为5并且给b和c赋值为5,但bc都还没定义不能赋值
int a,b,c; a=b=c=5; 是可以的,因为等价于先定义了abc,然后再赋值
C语言数据类型
-
数据类型的分类
-
数据类型所占字节数及能表达的数字范围
类型说明符 字节数 取值范围 解释 int 4 (-231, 231-1) 用4个字节共32位表示,最高一位表示符号,所以是231,还有个0,所以-1 short int 2 (-215, 215-1) 用2个字节共16位表示,最高一位表示符号,所以是215,还有个0,所以-1 long int 4 (-231, 231-1) 用4个字节共32位表示,最高一位表示符号,所以是231,还有个0,所以-1 unsigned int 4 (0, 232-1) 用4个字节共32位表示,最高一位表示数字,所以是232,还有个0,所以-1。
没有符号位所以表示不了负数unsigned short int 2 (0, 216-1) 用2个字节共16位表示,最高一位表示数字,所以是216,还有个0,所以-1。
没有符号位所以表示不了负数unsigned long int 4 (0, 232-1) 用4个字节共32位表示,最高一位表示数字,所以是232,还有个0,所以-1。
没有符号位所以表示不了负数float 4 (-3.4×1038, 3.4×1038) double 8 (-1.7×10308, 1.7×10308) long double 8 (-1.7×10308, 1.7×10308) char 1 (-27, 27-1) 用1个字节共8位表示,最高一位表示符号,所以是27,还有个0,所以-1 -
十进制小数与二进制小数相互转换
部分 十进制转二进制 二进制转十进制 整数部分 用2整除十进制整数,可以得到一个商和余数;
再用2去除商,又会得到一个商和余数
如此进行,直到商为小于1时为止
然后把先得到的余数作为二进制数的低位有效位
后得到的余数作为二进制数的高位有效位
依次排列起来直接计算 N = n1×20+n2×21+…+nk×2k-1 小数部分 用2乘十进制小数,可以得到积,将积的整数部分取出
再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出
如此进行,直到积中的小数部分为零
此时0或1为二进制的最后一位
或者达到所要求的精度为止。从小数点后开始,依次乘以2的负一次方
2的负二次方,2的负三次方等。最后相加举例:
1)十进制5.875转为二进制
整数部分 = 101(5/2=2余1,最后一位为1;2/2=1余0,倒数第二位为0;1/2=0余1,倒数第三位为1)
小数部分 = 111(0.857×2=1.75,第一位为1;0.75×2=1.5,第二位为1;0.5×2=1,第三位为1)
所以 5.875 = 101.111
2)二进制110.101转为十进制
整数部分 = 6(0×20+1×21+1×22)
小数部分 = 0.625(1×2-1+0×2-1+1×2-3)
所以 110.101 = 6.625 -
浮点类型详细解释
任何一个浮点数都可以用以2为底的科学计数法表示
即,N=数符×2E×M
其中数符的值决定数的正负,阶码E的位数决定数的范围,尾数M的位数决定数的精度
E不能全为0或者全为1float类型用4个字节共32位存储,数符1位+阶码8位+尾数23位
阶码是8位,所以能表示(-128,127)之间的数
尾数23位,所以小数点后能有23位数
所以,float最大能表示的是 1.11111111111111111111111*2127 ≈ 2*2127 ≈ 3.4*1038
最小能表示的是 -1.11111111111111111111111*2127 ≈ -2*2127 ≈ -3.4*1038
注意,最小能表示的不是 -1.11111111111111111111111*2-128 ≈ -2*2-128 ≈ -1.5*10-39
double类型用8个字节共64位存储,原理与上述类似
假设要存储float类型数据 -5.875
1)该数是负数,所以数符位为1
2)将十进制转为二进制,-5.875 = -101.111 = (-1)1×1.01111×22
3)因为M的值一定是1<= M <2,所以规定M在存储时舍去第一个1,只存储小数点之后的数字
4)因此实际存储的二进制位 1 10000010 01111000000000000000000
常量
- 常量的分类
数值常量、符号常量、字符常量、字符串常量 - 数值整型常量
可以用不同进制表示
十进制数:0~9
八进制数:0~7,以0开头
十六进制数:0~9,A~F/a~f,以0x或0X开头
长整型数:在整数后加上L或l
例如:100、-8、0;010、024;0x18、0X1F;123L、456l - 数值浮点型常量
十进制数形式:由数字、小数点和正负号组成(必须有小数点),例如23.789、.678、23.
指数形式:由数字、小数点、字母e/E和正负号组成(e/E之前必须有数字且其后的指数必须为整数)例如2.5E-5、2e3
浮点型常量后加f或F表示按照单精度存储和运算
例如:1.2345f、3.1415926F - 符号常量/宏常量
定义:用一个符号代表一个常量,必须在函数的开始用宏定义声明后使用
格式:#define 宏名 符号串
,宏名常用全大写表示,符号串可以是常量/表达式/格式串等
功能:在程序编译时,先将符号串替换程序中所有宏名,再进行编译
例子:#include<stdio.h> #define PI 3.1415926 // PI是宏名,这一句不用加分号 int main(){ float s,r=10; s=PI*r*r; // 这里使用PI,在编译的时候就会替换成3.14 printf("s=PI*r*r=%f",s); // 字符串中的宏名不会被替换,即此处的PI还是输出PI return 0; }
- 字符常量
定义:用来表示一个字符值,存储的是字符的ASCII码
格式:用单引号括起来的一个字符
例如:‘a’、‘A’、’$’、‘1’ - 字符串常量
定义:用来表示一串字符
格式:用双引号括起来的一个或多个字符
例如:“abc”、“a”、"\n" - 转义字符
定义:用转义符号“\”表示的字符,表示将其后的字符原本的含义进行转换,变成另一个含义
例如:转义字符 功能 \n 换行 \r 回车,光标回到当前行首,如果接着输出的话,本行以前的回内容会被逐一覆盖 \t 制表符,相当于空8列 \b 退格 \\ 反斜线字符 \’ 单引号字符 \" 双引号字符 \ddd 1到3位八进制数表示的字符 \xdd 1到2位十六进制数表示的字符 #include<stdio.h> int main(){ printf("123456\n"); // 输出数字,然后换行 printf("c\tlanguags\be\rC\n"); // c,\t表示制表所以空8列,languags,\b表示光标退一个,然后再输出e覆盖s // \r表示回车,光标回到行首,然后输出C覆盖原本的c printf("is\tusef\165\x6c"); // \t为制表符,\165为八进制表示的字符,转为十进制后为117,对应ASCII码的字符u // \x6c为十六进制表示的字符,转为十进制后为108,对应ASCII码的l return 0; }
- const定义常量
C语言中有个很重要的关键字 const
该关键字的作用是将一个变量定义为一个不能改变的量
具体用法后面再说,要记住这个很重要!!