[1]运算符
1.1 逻辑运算符
&& 逻辑与:全真则真,一假则假
|| 逻辑或:一真则真,全假则假
! 逻辑非:非真则假,非假则真
0为假 1为真
printf("%d\n",2>3); //0
printf("%d\n",22>3);//1
printf("%d\n",12>3&&8<6); //0
printf("%d\n",12>3||8<6); //1
printf("%d\n",12>3 && !(8<6)); //1
printf("%d\n",!1);//0
0为假 非0值为真
printf("%d\n",81&&10); //1
截断法则:
逻辑与运算中,前边的表达式结果为假,后边的表达式不再执行,直接返回假
逻辑或运算中,前边的表达式结果为真,后边的表达式不再执行,直接返回真
练习:
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("%d %d",m,n); //0 2
}
0 2
2
1.2 位运算符
二进制数 0 1
& | ^ ~ << >>
& 位与:全1则1,有0则0
| 位或:有1则1,全0则0
^ 异或:相同为0,不同为1
~ 取反:1为0,0为1
练习:
变量x和y的值相等,且为非零值,则以下选项中,结果为0的表达式是()
A.x||y B.x|y C.x&y D.xD
D
实现两个变量值的交换:
int a=12,b=10;
1)
int temp=0;
temp=a;
a=b;
b=temp;
printf("%d %d\n",a,b);
2)
a=a^b;//0110==6
b=a^b;//0110 1010 1100=12
a=a^b;//0110 1100 1010=10
printf("%d %d\n",a,b);
计算机中,整数以二进制的补码形式存储,计算的
原码、反码、补码
原码 | 反码 | 补码 | |
正数 | 相同 | 相同 | 相同 |
负数 | 相同 | 除符号位外,其他按位取反 | 反码+1 |
int 4字节=32位 1字节=8位
符号位:最左边 0正数 1负数
12:
0000 0000 0000 0000 0000 0000 0000 1100
-12原码:
1000 0000 0000 0000 0000 0000 0000 1100
-12反码
1111 1111 1111 1111 1111 1111 1111 0011
-12补码
1111 1111 1111 1111 1111 1111 1111 0100
~取反:1-->0 0-->1
int a=7;
int c=~a;
printf("%d\n",c);//-8
<< 左移
左移n位,右边补充n个0
=24
>> 右移
右移n位,最右边舍弃
=1
=-2
置一公式:
a|(1<<n)
a=13 n=2
1101
0010
1111
置零公式:
a&(~(1<<n))
练习:
以下程序升输出结果是()。
int main()
{
char x=040;
printf("%o\n",x<<1);
return 0;
}
A.100 B.80 C.64 D.32
A
B
52
1.3关系运算符
> >= < <= == !=
==等于 =赋值
2~9 x>2&&x<9
1.4三目运算符(选择运算符)
表达式1 ? 表达式2 : 表达式3 ;
单目运算符:
~ ++ -- !
1.5赋值运算符
= += -= *= /= %=
a-=5; //a=a-5;
1.6运算符优先级
口诀:单算移关与 异或逻条赋
练习:
设int b=2;表达式 (b>>2)/(b>>1)的值是()
A.0 B.2 C.4 D.8
A
A
3
标点符号
, ; [] {} ()
分隔符
空格 tab \n
[2]变量
程序运行过程中会发生变化
格式:
存储类型 数据类型 变量名
int x
存储类型:存储位置
数据类型:空间大小
变量名:遵循标识符命名规则
名字 | 字节大小 | 取值范围 | |
int | 整型 | 4 | |
char | 字符型 | 1 | |
short | 短整型 | 2 | |
long | 长整型 | 8 | |
float | 单精度浮点型 | 4 | |
double | 双精度浮点型 | 8 |
printf("%ld\n",sizeof( ));
局部变量和全局变量的区别:
局部变量 | 全局变量 | |
定义位置 | 函数体内部 | 函数体外部 |
初值 | 未初始化值是随机值 | 未初始化,值是0 |
存储位置 | 栈区 | 全局区 |
生命周期 | 同当前函数共存亡 | 同程序共存亡 |
作用域 | 当前函数体内部 | 整个程序 |
[3]常量
程序运行过程不变
3.1整型常量
八进制 十进制 十六进制
3.2字符常量
字符 由''包裹一个字符
字符串 由‘’包裹由'\0'结束
3.3浮点型常量
float double
3.4标识常量
宏定义:
#define 宏名 常量值
宏名:一般大写和普通变量区分
注意:先原样替换,再计算值
#include<stdio.h>
#define N 2
#define M N+2
#define NUM 2+M*3+1
int main()
{
int x;
printf("%d %d\n",x,NUM);
return 0;
}
11
作业:
- 梳理笔记
1