目录
学习目标:
- 一周掌握c入门知识
学习内容:
1.运算符
1.1 逻辑运算符
&&逻辑与:全真则真,有假则假
||逻辑或:有真则真,全假则假
!逻辑非:非真则假,非假则真
例如:
截断法则
逻辑或运算中,前边的表达式结果为真,后边的表达式不再执行,直接返回真。
例如:
1.2 位运算符
位运算是针对二进制而言的,但凡涉及位运算,在计算机中都会转换成二进制来参与运算,且一般位运算都是无符号数参与运算,如果用有符号数,会涉及原码反码补码转换的问题。位运算一般多用于 硬件设备的控制 和 标志位的控制 等。
& 按位与 :按位运算 全1为1 有0为0
| 按位或 :按位运算 有1为1 全0为0
^ 按位异或 :按位运算 不同为1 相同为0
~ 按位取反 :按位运算 1变0 0变1
<< 按位左移 :整个数据向左移动 低位补0 舍弃高位
>> 按位右移 :整个数据向右移动 高位补0 舍弃低位
例如:
1.3 原码,补码,反码
原码 | 补码 | 反码 | |
正数 | 相同 | 相同 | 相同 |
负数 | 相同 | 反码+1 | 除符号位外,其他位取反 |
例如:
35的补码,反码
0000 0000 0000 0000 0000 0000 0010 0011
-18的反码
1111 1111 1111 1111 1111 1111 1110 1101
-10的补码
1111 1111 1111 1111 1111 1111 1110 1110
35 & -18
0000 0000 0000 0000 0000 0000 0010 0011
1111 1111 1111 1111 1111 1111 1110 1110
0000 0000 0000 0000 0000 0000 0010 0010 = 36
置一公式:a|(1<<n)(注意:只有一位变化的时候才能使用)
置零公式:a&(~(1<<n))
例如:
想要把0100 0110 变成0101 0110,则n=4;
想要把0100 0110 变成0100 0010,则n=2;
1.4 关系运算符
> >= < <= == !=
使用来比较大小关系的
要特别注意:关系运算符的判断相等是两个等号,一个等号是赋值运算符
关系运算符表达式的结果是一个 bool 类型,0 表示假 非0表示真
1.5 三目运算符(选择运算符)
?:
表达式1?表达式2:表达式3
例如:
1.6 赋值运算符
运算符优先级
顺口溜
单算移关于,异或逻条赋。
单目运算符: ~ ++ -- !
算术运算符: * / % + -
移位运算符: << >>
关系运算符: > >= < <= == !=
位与运算符: &
异或运算符: ^
位或运算符: |
逻辑运算符: && ||
条件运算符: ?:
赋值运算符: = += -= *= /= %=
2.变量
2.1 概念
在整个程序运行的过程中,值允许发生变化的量。
变量一般使用来保存数据的。
2.2 格式
存储类型 数据类型 变量名
int a;
存储类型:决定变量存储位置
数据类型:决定变量开辟空间大小
变量名:遵循标识符命名规则
2.3 局部变量与全局变量的区别
局部变量 | 全局变量 | |
定义位置 | 函数体内部 | 函数体外部 |
初值 | 未初始化时值随机 | 未初始化时值为0 |
存储位置 | 栈区 | 全局区 |
生命周期 | 与函数共存亡 | 与程序共存亡 |
作用域 | 作用于函数内,只在函数内可见 | 作用于程序,可以在任何地方修改 |
重用性 | 每次函数调用都会创建新的局部变量,函数调用结束后局部变量被销毁。 | 在程序的整个运行期间只创建一次。 |
3.常量
3.1 概念
在整个程序运行的过程中,值不会发生变化的量。
常量一般是用来给变量赋值或者参与比较。
3.2 分类
3.2.1 整型常量
前导符 输出占位符 例如
二进制 0b 无 0b1010
八进制 0 %o 0567
十进制 无 %d 1314
十六进制 0x %x 0x56EF
3.2.2 浮点型常量
float %f 3.14
double %lf 5.28
指数常量 %e
3.2.3 字符常量
%c 'm'
3.2.4 字符串常量
%s "www.123.com"
3.2.5 标识常量
关键字 #define 也就是我们说的宏定义
格式:
#define 宏名 宏值
宏名:一般用大写表示,为了和普通变量区分开
注意:
1.宏定义是在预处理阶段完成替换的。
2.宏定义只是一个简单的无脑的替换。
例如:
#define STUDENT 30
课堂练习:
1.变量x和y的值相等,且为非零值,则以下选项中,结果为0的表达式是(D)
A.x||y B.x|y C.x&y D.x^y
2.以下程序升输出结果是(A)。
int main()
{
char x=040; //100 000
printf("%o\n",x<<1);//1 000 000
return 0;
}
A.100 B.80 C.64 D.32
3.设int b=2;表达式 (b>>2)/(b>>1)的值是(A)
A.0 B.2 C.4 D.8
解析:因为b=0010,b>>2=0000,b>>1=0001;所以(b>>2)/(b>>1)=0.
4.
解析:b=0110,b<<2=00011000,a^b=00011011.所以选择A.
5.
解析:由于z 的值是4,在布尔上下文中 !z
的结果会是 0,y
的值是3,而 !z的结果是 0,所以 3>0的结果是true。在C语言中,true可以用 1
表示。所以答案位3。
6.
A的值为多少?
解析:A=2+2+2*3+1=11,所以A的值为11。
课后作业:
1.
输出结果为(10);
解析:因为k+m=3,SQR(X)=X*X,则SQR(k+m)/SQR(k+m)=2+1*2+1/2+1*2+1=7,a/=7为a=a/7,
所以a的值为1。
2.
解析:N=5+5,k=5+5*5+5*5,k=55.所以选择C。