文章目录
一、关键字
1、数据类型
类型 | 大小 |
---|---|
char字符类型 | 1字节 |
short短整型 | 2字节 |
int整形 | 4字节 |
long长整型 | 4字节 |
float单精度浮点数 | 4字节 |
double 双精度浮点数 | 8字节 |
2、存储变量
register寄存器变量
static静态变量
const只读变量
auto自动变量
extern声明变量外部可用
3、控制语句
if 、else 、switch、 case、 default条件控制语句
continue、break、 for、 while、 goto循环控制语句
4、其他关键字
sizeof 测量类型的大小
typedef 给类型取别名
volatile 防止编译器优化
二、字符类型解释
1、常量与变量
常量:所见即所得,它的值不能修改
printf(“%c\n”, ‘a’); 输出字符
printf(“%p\n”, ‘a’); 输出地址
printf(“%d\n”, 10); 输出整型
printf(“%hd\n”, 10); 输出短整型
printf(“%ld\n”, 10L); 输出长整型
printf(“%f\n”, 3.14f); 输出浮点型
printf(“%lf\n”, 3.14); 输出双精度
printf(“%s\n”, “hello world”);输出字符串
变量:系统根据变量的类型大小,为变量开辟空间
变量命名规则:以字母、数字、下划线组成,不能以数字开头,不能是关键字
2、整型
//变量声明,告诉编译器声明,不能赋值
extern int data2;//变量的声明
int data2=100;//变量定义
3、键盘输入输出
scanf(“%d\n”,&a);
printf (“%d\n”,a);
4、字符类型
‘a’
单引号 只能作用一个字符,转义字符除外。
单引号:
第一个作用’a’描述a为字符
第二个作用去字符的ASCLL值
printf %c输出的是字符
printf %d输出的是字符的ASCLL值
5、字符变量
字符定义
char ch=’\0’;
getchar();可用于去除回车或接受字符
6、浮点型
sizeof();
显示所占字节数
sizeof(num);
定义:float f=3.14f;//浮点型加f
三、进制
二进制,c语言不能直接输出二进制
八进制,%o输出八进制 不区分正负
十进制,%d %ld %hd %u %lu %hu
进制转换
十进制转其他进制用短除法
其他进制转二进制,将n进制转换成二进制
printf(“%#o\n”, num);输出八进制
printf(“%#x\n”, num);输出十六进制
四、原码反码补码
1、计算机中数据以补码形式存储
无符号数:原码=反码=补码
有符号数:
正数:原码=反码=补码
负数:反码=原码符号位不变,其他位按位取反
补码=反码+1
2、补码意义
统一了0的编码
将减法运算变加法运算
3、计算机存储
负数在计算机以补码的方式存储
非负数在计算机中以原码形式存储
八进制数以原码存储
十六进制以原码存储
五、转义字符
\和某些字符结合产生新的含义
‘\0’ ASCII为0
‘\n’换行符
‘\t’缩进符
‘\r’回到首行符
‘\a’发出警报
八进制转义 ‘\ddd’
‘\ddd’ 每个d的范围必须是0~7 3个d表示最多识别3位八进制数据
十六进制转义 ‘\xhh’
‘\xhh’每个h的范围0~9 a~f 2个h表示最多识别2位十六进制
六、运算符
1、运算符说明
(1)无符号和有符号 参加运算 需要将有符号 转换成无符号
(2)int和double参加运算 会将int转成从double类型
(3)0char和short类型 只要参加运算 都会将自己转换成int类型
(4)强制转换
(类型说明符)(表达式)
(int)p+1//对p强转int类型后+1
(int)(p+1)对p+1强转成int类型
2、基础运算符
/ 如果/的所有运算对象都是整数 /的功能就是取整
如果/有一个运算对象是实型 /的功能就是除法运算
% 取余运算符
a+=b a=a+b
a-=b a=a-b
a*=b a=a*b
a/=b a=a/b
a%=b a=a%b
将右边看成一个整体
a*=4+5 === a=a*(4+5)
3、逻辑运算符
逻辑与&&
逻辑或||
逻辑非!
(1) &
按位与& (有0为0,全为1为1)
a=11001100
a=a & 10111111
a=10001100
(2) |
按位或| (有1为1,全为0为0)
a=1100110
a=a | 10111111
a=11111111
(3) ~
按位取反~ (0变1,1变0)
a=11001100
a=~a
a=00110011
(4)^
按位异或^ (相同为0不同唯1)
a=11001100
a=a ^ 10111111
a=01110011
4、左移和右移
(1)左移(左边舍弃,右边补零)
a=1100 0011
a<<3; //a左移三位
a = 0001 1000
(左移相当于乘法,左移一位2,左移两位2^2)
(2)右移
(左边补零用户无法决定,右边舍弃)逻辑右移
a=1110 0011
a>>3; //右移三位
a = 0001 1100
(左边补一用户无法决定,右边舍弃)算数右移
a=1110 0011
a>>3; //右移三位
a = 1111 1100
无符号数:右边丢弃 左边补零
有符号数:
正数:右边丢弃 左边补零
负数:右边丢弃 左边补零(逻辑右移)
右边丢弃 左边补一(算术右移)
(3)高级应用
data为1字节将data的3、4位清零,其他位保持不变
data=data & 1110 0111
1110 0111 == ~(0001 1000) ==~(0001 0000 | 0000 1000)
==~(0000 0001<<4 | 0000 0001<<3)
==~(0x01<<4 | 0x01<<3)
data = data &~(0x01<<4 | 0x01<<3)
data &= ~(0x01<<4 | 0x01<<3)//后期清零,n位可加|0x01<<n
data为1字节将data的5、6位置1,其他位保持不变
data=data | 0110 0000
0110 000 == 0100 0000 | 0010 0000 ==0000 0001<<6 | 0000 0001<<5
==0x01<<6 | 0x01<<5
data = data | (0x01<<6 | 0x01<<5)
data |= 0x01<<6 | 0x01<<5//后期置一 ,n位可加|0x01<<n
5、三目运算符
表达式?值1:值2;
printf(“%d\n”,a>10?14:15);//判断a是否大于10,大于输出14,否则输出15