20240905-C语言Day2
运算符
逻辑运算符
&& || !
&& 逻辑与 全真则真,一假则假
|| 逻辑或 一真为真,全假则假
! 逻辑非 非真即假,非假即真
截断法则:
逻辑与中,前面的表达式为假,后边不再执行,返回假
逻辑或中,前面的表达式为真,后边不再执行,返回真
位运算符
二进制
&、|、^、~、<<、>>
&:位与,全1则1,有0则0
|:位或,有1则1,全0则0
^:相同为0,不同为1
源码 | 反码 | 补码 | |
正数 | 相同 | 相同 | 相同 |
负数 | 相同 | 除符号位之外,其他按位取反 | 反码+1 |
~:取反
<<:左移,左移几位就乘2的几次方
>>:右移,右移几位就除2的几次方
置一公式:a|(1<<n)
置零公式:a&(~(1<<n))
//两数交换
int a = 3,b = 5,c;
c=a;
a=b;
b=c;
-----------------------
a=a^b
b=a^b
a=a^b
-----------------------
a=a+b
b=a-b
a=a-b
关系运算符
>、<、>=、<=、==、!=
选择运算符(三目运算符)
表达式1?表达式2:表达式3
赋值运算符
=、+=、-=、*=、/=、%=
a += 3 <===> a = a + 3
优先级
单算移关与,异或逻条赋
单目运算符:++、--、~、!
算术运算符:/ * % + -
位移运算符:<< >>
关系运算符:> >= < <= == !=
位与运算符:&
异或运算符:^
位或运算符:|
逻辑运算符:&& ||
条件运算符:? :
赋值运算符:=
分隔符
空格 tab 换行
标点符号
英文输入法
变量
程序运行过程中会发生变化的量
存储类型 数据类型 变量名
默认(auto) int a;
存储类型:决定变量存储的位置
数据类型:决定开辟空间的大小
名称 | 大小(字节) | 取值范围 | |
int | 4 | ||
char | 1 | -128~127 | |
short | 2 | ||
long | 32位:4,64位:8 | ||
float | 4 | 有效位数:6-7位 | |
double | 8 | 有效位数:6-7位 |
局部变量和全局变量
局部变量 | 全局变量 | |
定义位置 | 函数内部 | 函数外部 |
初值(未初始化) | 随机值 | 0 |
作用域 | 当前函数体的内部使用 | 整个程序 |
生命周期 | 同当前函数共存亡 | 同整个函数体共存亡 |
存储位置 | 栈区 | 全局区 |
常量
数值型常量
八进制、十进制、十六进制
浮点型常量
float double
字符常量
用单引号包裹
char
#include <stdio.h>
int main(int argc, const char *argv[])
{
char a = 'A';
char b = '101';
char c = 0101;
char d = '\101';
printf("%c,%c,%c,%c\n",a,b,c,d);
return 0;
}
字符串常量
用双引号包裹,\0字符串结束标志
"hello" 5个字符+'\0'字符串结束标志 == 6个字符
标识常量
宏定义
格式:#define 宏名 常量值或表达式或函数
宏名:一般用大写,目的与变量区分开
特点:先进行单纯的替换,替换完之后再计算
#include <stdio.h>
#define N 2
#define M N+2
#define NUM N+M/2+1
int main(int argc, const char *argv[])
{
int a = NUM;
printf("%d\n",a);
return 0;
}
宏函数 了解
#include<stdio.h>
#define MAX(a,b) a>b?a:b
int main(int argc, char const *argv[])
{
printf("%d\n",MAX(6,3)); //6
return 0;
}
扩展:
局部变量可以和全局变量重名吗?
可以,遵循就近原则;在定义的函数体内部,以局部变量为主;其他位置以全局变量为主。