1.操作符分类
算术操作符:+、-、*、/、%
移位操作符:<< >>
位操作符:& | ^`
赋值操作符:=、+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=
单⽬操作符: !、++、--、&、*、+、-、~、sizeof、(类型)
关系操作符:>、>=、<、<=、==、!=
逻辑操作符:&&、||
条件操作符:? :
逗号表达式: , (逗号表达式,就是⽤逗号隔开的多个表达式)
下标引⽤: [] ( 下标引⽤操作符)
函数调⽤:()
结构成员访问:.、->
2.⼆进制和进制转换
其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已,几进制就是逢几进一。
15的2进制:1111 15的8进制:17 15的10进制:15 15的16进制:F3.原码、反码、补码
整数的2进制表示方法有三种,即原码、反码和补码
有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号 位,剩余的都是数值位。
符号位都是用0表示“正”,⽤1表示“负”。
正整数的原、反、补码都相同。
负整数的三种表示方法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
4.移位操作符
<< 左移操作符
>> 右移操作符
注意:移位操作符的操作数只能是整数。
4.1左移操作符
移位规则:左边抛弃、右边补0
4.2右移操作符
右移操作符分两种:
1. 逻辑右移:左边⽤0填充,右边丢弃
2. 算术右移:左边⽤原该值的符号位填充,右边丢弃
算术右移
逻辑右移
*5.位操作符:&、|、^、~(必须是整数)
& //按位与(全1才1,有0就0)
| //按位或(全0才0,有1就1)
^ //按位异或(相同为0,不同为1)
~ //按位取反(0->1,1->0)
*6.结构成员访问操作符
6.1结构体
struct Stu { char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 }; //分号不能丢6.2结构成员访问操作符
1.结构体变量.成员名
#include <stdio.h> struct Point { int x; int y; }p = {1,2}; int main() { printf("x: %d y: %d\n", p.x, p.y); return 0; }2.结构体指针->成员名
#include <stdio.h> struct Point { int x; int y; }; int main() { struct Point p = {3, 4}; struct Point *ptr = &p; ptr->x = 10; ptr->y = 20; printf("x = %d y = %d\n", ptr->x, ptr->y); return 0; }7.优先级
参考:https://zh.cppreference.com/w/c/language/operator_precedence