C语言day03
运算符
- 逻辑运算符
&& 逻辑与: 全真则真,一假则假
|| 逻辑或: 一真则真,全假则假
! 逻辑非:非真则假,非假则真
当数字作为判断条件是,0为假,非0为真
截断法则
逻辑与 && :当前面的表达式为假时,后面的表达式就不再执行,返回假
逻辑或 || :当前面的表达式为真时,后面的表达式就不再执行,返回真
例:
int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后,n=______
n仍然等于2
前面的m=a>b,a>b 为假,这是根据截断法则后面的表达式不再执行,所以n仍为2
2.关系运算符
> < >= <= == !=
- 位运算符
& | ^ ~ << >>
& 位与 : 全1则1,有0 则0
| 位或 : 有1则1,全0则0
^ 异或 : 相同为0,不同为1
~ 取反 : 1变0,0变1
<< 左移运算符
左移几位就在右边补几个零
10<<2 --> 1010 (补两个0) ---> 101000(40)
相当于 10*2^2 左移几位就相当乘以2的几次方
>> 右移运算符
右移几位就在右边舍弃几位
10>>2 --.> 1010 (舍弃两位:10) --> 10(2)
相当于 10/2^2 右移几位就相当于除以2的几次方
置一公式:a | (1<<(n-1))
置零公式:a & (~(1<<(n-1))
原码、反码、补码
整数在计算机中以补码的形式存储、计算
原码 | 反码 | 补码 | |
正数 | 相同 | 相同 | 相同 |
负数 | 相同 | 除符号位,其他位按位取反 | 反码加1 |
例:
int a=15;
int b=-12;
int c = a & b;
printf("%d\n",c); //4
15 原码(补码):
0000 0000 0000 0000 0000 0000 0000 1111
-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
位与:(有0 则0,全1则1)
0000 0000 0000 0000 0000 0000 0000 1111
1111 1111 1111 1111 1111 1111 1111 0100
0000 0000 0000 0000 0000 0000 0000 0100------->4
练习:
实现两个数的交换
(1)通过一个中间变量temp
int a=1,b=2;
int temp;
temp = a;
a = b;
b = temp;
printf("a=%d b=%d\n",a,b); //a=2 b=1
(2)通过三次异或操作实现交换
int a=1,b=2;
a = a^b;
b = a^b;
a = a^b;
b = temp;
printf("%d %d\n",a,b); //a=2 b=1
- 三目运算符(选择运算符、条件运算符)
表达式1 ? 表达式2 : 表达式3
int a=5,b=8;
int c=a > b ? a : b;
pritnf("c=%d\n",c); //c=8
- 赋值运算符
= += -= /= *= %=
- 运算符优先级
单算移关与 异或逻条赋
单目运算符: ++ -- ! ~
算术运算符: * / % + -
移位运算符: << >>
关系运算符: < > >= <= == !=
位与运算符: &
异或运算符: ^
位或运算符: |
逻辑运算符: && ||
条件运算符: ?:
赋值运算符: += -= *= /= %=
- 变量
概念:在程序的运行过程中会发生变化的量
定义格式:存储类型 数据类型 变量名
例:int a;//定义一个整型变量a
数据类型:
类型 | 字节 | 取值范围(了解) |
int | 4 | -2^31 ~ 2^31 -1 |
char | 4 | -2^7 ~ 2^7-1 |
double | 8 | -2^15 ~ 2^15 -1 |
float | 1 | 32:-2^31 ~ 2^31 -1 64:-2^63 ~ 2^63 -1 |
short | 2 | 有效位数:6-7 |
long | 32位:4 64位:8 | 有效位数15-16 |
变量分类:
- 全局变量:定义在函数外部,在整个程序中都可以被访问
- 局部变量:定义在函数内部,在整个函数中都可以被访问
局部变量和全局变量的区别:
局部变量 | 全局变量 | |
定义位置 | 函数内部 | 函数外部 |
初始值(不赋值) | 随机值 | 0 |
作用域 | 整个函数中都可以 | 整个程序中都可以 |
存储位置 | 栈区 | 全局存储区 |
生命周期 | 和整个函数共存亡 | 和整个程序共存亡 |
- 常量
概念:在程序运行中不会发生变化的量
分类:
字符型常量
字符串型常量
整型常量
浮点型常量
指数常量
标识常量
1》字符型常量
使用单引号' '包裹的内容都叫字符,单引号只能包裹一个字符
'a'---->字符常量a
a ---->变量a
'!' ----->字符!
'1' ----->字符1
'\n' ----->换行
\ :转义字符 后面可以跟随 字母 数字(八进制:以0开头 十六进制:以x开头 不是0x)符号 转义字符表示一个字符
例:
'\x41' ---->'\101'----->'A'
printf("你说:\"ssssss\" ");
转义字符后加标点符号,表示将该标点符号转移为普通的标点符号使用
例:
'\\' :表示将转义字转义为普通的斜杠字符 \
'?' : 表示将?转为普通的字符?
2》字符串常量
使用双引号" "包过的内容都叫字符串,系统会在字符串最后添加 \0 作为字符串结束的标志
例:
"hello" ----->字符串hello 字符的长度+1(\0)
"abc"
3》整型常量
1 2 3 4 5 6
4》浮点型常量
1.2 3.4 5.66
5》指数常量
3*10^2------>3e2
2*10^5------>2e5
e表示乘以10的次方
注意:e的后面不能跟小数,只能跟整数
6》标识常量
宏定义:用于标识常量或者表达式 (也叫宏替换 宏代替)
定义格式:#define 宏名(一般大写) 常量或者表达式
特点:只做单纯的替换 不会进行计算
驼峰命名法:
大驼峰:FirstName //每一个单词的首字母都大写
小驼峰:firstName //除了第一个单词首字母不大写,剩下的都大写
- 输入输出语句
1》按照格式输出
格式:
类型 | 格式 |
int | %d |
float | %f |
double | %lf |
char | %c |
字符串 | %s |
十六进制 | %#x 、 %x |
八进制 | %#o 、 %o |
地址 | %p |
指数 | %e |
输出 : printf
man 手册 第三卷 printf
#include<stdio.h>
int printf(const char *format, ......);
功能:输出内容
参数:1.字符串 如果包含格式则有后续参数
2.要和第一个参数中的格式相对应
返回值:输出的字符个数
输入 :scanf
man 手册 第三卷 scanf
功能:可以输入内容
参数:1.字符串(只能写格式,不能多写任何东西)
2.用来保存数据的变量的地址
返回值:正确输入的个数
这个有种类截断法则的情况,如果你输入的值只要前面有一个不符合,则不在判断后面的是否符合;