八、操作符简单介绍
0x00 算数操作符
❓ 什么是算数操作符?
📚 算术运算符即算术运算符号。是完成基本的算术运算 (arithmetic operators) 符号,就是用来处理四则运算的符号。
💬 代码演示:
int main() { int add = 1 + 1; int sub = 2 - 1; int mul = 2 * 3; float div = 9 / 2.0; //只要有浮点数出现,执行的就是浮点数除法 int mod = 123 % 10; return 0; }
0x01 移位操作符
❓ 什么是移位操作符?
📚 移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。
💬 代码演示:
int main() { // 移位操作符 移动的是它的二进制位 // << 左移 // >> 右动 int a = 1; // 整形1占4个字节-32bit位 // 0000000000000000000000000000001 int b = a<<1; // 0000000000000000000000000000010 左边丢弃,右边补0 printf("%d\n", b); printf("%d\n", a); return 0; }
🚩 运行结果: 2 1
0x02 位操作符
❓ 什么是位操作符?
📚 位操作是程序设计中对位模式按位或二进制数的一元和二元操作
💬 代码演示:
#include <stdio.h> int main() { //位操作 依然是二进制位 // & 按位与 都为真,则返回真,只要出现假,就返回假 int a = 3; //真 int b = 5; //真 int c = a&b; //按位与 // 011 // 101 // 001 // R→ 1 //真 printf("%d\n", c); int d = a|b;// 按位或 有真则为真,无则假,只要出现真,就返回真 // 011 // 101 // 111 // R→ 7 printf("%d\n", d); int e = a^b;// 按位异或 相同为假,相异为真 11\ 00-> 0 10 -> 1 //异或的计算规律 //对应的二进制位相同,则为0 //对应的二进制位相异,则为1 // 011 // 101 // 110 // R→ printf("%d\n", e); return 0; }
0x03 赋值操作符
❓ 什么是赋值操作符?
📚 赋值运算符是双目运算符,用在赋值表达式中。赋值运算符将值存储在运算符左边操作数指定的变量中。
💬 代码演示:
#include <stdio.h> int main() { int a = 10; a = 20; // “=” 赋值 “==” 判断相等 a = a+10; //1 a += 10; // 2 a = a-20; a -= 20; a = a & 2; a &= 2; //这些操作叫做 复合赋值符 return 0; }
0x04 单目操作符
❓ 什么是单目操作符?
📚 单目操作符,也就是只接受一个操作数的操作符。
💬 逻辑反操作 !
💬 按位取反 ~
int main() { int a = 0; printf("%d\n", ~a); // ~ 按(二进制)位取法 //把所有二进制位的数字,1变成0,0变成1 //整数a // 0 // 00000000000000000000000000000000 // 11111111111111111111111111111111 ~a // 数据在内存中存储的是补码 // 一个整数的二进制表示有三种: 原码 反码 补码 // 负数的计算 -1: // 10000000000000000000000000000001 (原码) // 11111111111111111111111111111110 (反码) // 11111111111111111111111111111111 (补码) -> 在内存中存的 // 正的整数: 原码、反码、补码相同 return 0; }
💬 前置++
int main() { int a = 10; int b = ++a; //前置++, 先++后使用 printf("%d\n", b); //11 printf("%d\n", a); //11 return 0; }
💬 后置++
int main() { int a = 10; int b = a++; //后置++,先使用再++ printf("%d\n", b); printf("%d\n", a); return 0; }
💬 强制类型转换:
int main() { int a = (int)3.14; //强制类型转换 printf("%d\n", a); return 0; }
0x05 逻辑操作符
📚 逻辑运算符或逻辑联结词把语句连接成更复杂的复杂语句
逻辑与:两个都为真即为真(and)
逻辑或:一个为真即为真(or)
💬 逻辑与 &&
int main() { int a = 3; int b = 5; int c = a && b; printf("%d\n", c); //1 return 0; }
💬 逻辑或 ||
int main() { int a = 3; int b = 0; int c = a||b; printf("%d\n", c); //1 return 0; }
0x06 条件操作符
📚 条件操作符就是三目操作符
exp1成立,exp2计算,整个表达式的结果是:exp2的结果。
exp1不成立,exp2计算,整个表达式的结果是:exp3的结果。
💬 条件操作符的用法:
int main() { //exp1成立,exp2计算,整个表达式的结果是:exp2的结果 //exp1不成立,exp3计算,整个表达式的结果是exp3的结果 int a = 0; int b = 3; int max = 0; /* 等价于 if(a>b) { max = a; } else { max = b; } */ max = a>b ? a : b; return 0; }
0x07 逗号表达式
📚 逗号表达式:逗号隔开的一串表达式。
逗号表达式是从左向右依次计算的。
整个表达式的结果是最后一个表达式的结果。
💬 逗号表达式的用法演示:
int main() { (2, 3+5, 6); int a = 0; int b = 3; int c = 5; // a=5 c=5-4 b=1+2 int d = (a=b+2, c=a-4, b=c+2); printf("%d\n", d); // 3 return 0; }
0x08 下标引用操作符
📚 [] 就是下标引用操作符。
💬 演示:
int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,10}; printf("%d\n", arr[5]); // 6 return 0; }
0x09 函数引用操作符
📚 调用函数时,函数名后面的()就是函数调用操作符
💬 演示:
int main() { printf("hehe\n"); printf("%d", 100); return 0; }