1、算数操作符
(1)加+
(2)减-
(3)乘*
(4)除/
A 整数的除法
7/2B 浮点型的除法
7.0/2 7/2.0 7.0/2.0(5)取模%
int a = 7 % 2; //输出1 //%的前后必须为整数2、移位操作符
移位操作符的操作数只能是整数。移位的是二进制数。
整数的二进制有三种:源码、补码、反码。正的整数原码、补码、反码相同;负的整数原码、补码、反码要计算。整数在内存中存储的是补码。
//7 //00000000000000000000000000000111-原码 //00000000000000000000000000000111-反码 //00000000000000000000000000000111-补码 //-7 //10000000000000000000000000000111-源码 //11111111111111111111111111111000-反码 //11111111111111111111111111111001-补码(反码+1)(1)左移位操作符<<
正数左移
int main() { int a = 7; int b = a << 1; printf("a=%d\n", a); //7 printf("b=%d\n", b); //14 return 0; }负数左移
int main() { int a = -7; int b = a << 1; printf("a=%d\n", a); //7 printf("b=%d\n", b); //-14 return 0; }(2)右移位操作符>>
算数移位:右边丢弃,左边补原符号位。
逻辑移位:右边丢弃,左边补0。
正数右移
int main() { int a = 7; int b = a >> 1; printf("a=%d\n", a); //7 printf("b=%d\n", b); //3 return 0; }负数右移(VS编译器使用算数右移)
int main() { int a = -7; int b = a >> 1; printf("a=%d\n", a); //-7 printf("b=%d\n", b); //-4 return 0; }3、位操作符
(1)按位与&
整数的二进制数各位上两者都是1的,按位与后的补码也是1,其他是0
int main() { int a = 3; int b = -5; int c = a & b; //00000000000000000000000000000011- 3 的补码 //10000000000000000000000000000101- -5 的原码 //11111111111111111111111111111010 //11111111111111111111111111111011- -5 的补码 //00000000000000000000000000000011 printf("c=%d\n", c); //3 return 0; }(2)按位或|
整数的二进制数各位上只要出现1的,按位或后的补码是1,其他是0
int main() { int a = 3; int b = -5; int c = a | b; //00000000000000000000000000000011- 3 的补码 //10000000000000000000000000000101- -5 的原码 //11111111111111111111111111111010 //11111111111111111111111111111011- -5 的补码 //11111111111111111111111111111011 printf("c=%d\n", c); //-5 return 0; }(3)按位异或^
整数的二进制数各位上,相同的是0,不同的是1
int main() { int a = 3; int b = -5; int c = a ^ b; //00000000000000000000000000000011- 3 的补码 //10000000000000000000000000000101- -5 的原码 //11111111111111111111111111111010 //11111111111111111111111111111011- -5 的补码 //11111111111111111111111111111000 printf("c=%d\n", c); //-8 return 0; }(4)位操作符的应用
不使用临时变量,实现两个整数的交换。
方法一:使用按位与、按位或。
int main() { int a = 3; int b = -5; printf("c1=%d\n", a & b); //3 printf("c2=%d\n", a | b); //-5 return 0; }方法二:使用按位异或
int main() { int a = 3; int b = 5; a = a ^ b; //a=3^5 b = a ^ b; //b=3^5^5 —> b=3 a = a ^ b; //a=3^5^3 —> a=5 return 0; }4、赋值操作符
=、+=、-=、&=、|=、^=、>>=、<<=
int main() { int a = 0;//初始化 int b = 0; b = 20;//赋值 a = a + 5; a += 5; a = a >> 1; a >>= 1; a = a - 1; a -= 1; return 0; }5、单目操作符
(1)逻辑反操作 !
int main() { int flag = 3; if (!flag) printf("hehe\n"); else printf("xixi\n"); //输出xixi return 0; }(2)负值 -
int a = -1;(3)正值 +
int a = +1;(4)取地址 &
int a = 3; int* p = &a;(5)操作数的类型长度(单位:字节) sizeof
int a = 10; int n = sizeof(a);(6)对一个数的二进制位取反 ~
int a = 0; printf("*d\n", ~a); //输出-1(7)前置、后置 --
(8)前置、后置 ++
int main() { int a = 3; int b = ++a;//前置++,先++,后使用 printf("%d\n", a);//输出4 printf("%d\n", b);//输出4 }int main() { int a = 3; int b = a++;//后置++,先使用,后++ printf("%d\n", a);//输出4 printf("%d\n", b);//输出3 }(9)间接访问操作符(解引用操作符) *
int a = 10; int* p = &a; *p = 20;(10)强制类型转换 (类型)
int a = (int) 3.14;srand((unsigned int)time(NULL)); //time()函数的返回值类型为time_t6、关系操作符
>、>=、<、<=、!=、==
7、逻辑操作符
(1)逻辑与 &&
两个条件都要满足才为真。
(2)逻辑或 ||
两个条件满足一个就为真。
int main() { int a = 3; int b = 0; int c = a && b; //并且 int l = a || b; //或者 printf("c=%d\n", c); //输出0 printf("l=%d\n", l); //输出1 return 0; }8、条件操作符
if (a > 5) b = 3; else b = -3; (a > 5) ? (b = 3) : (b = -3);9、逗号表达式
int a = 1; int b = 2; int c = (a > b, a = b + 10, a, b = a + 1); printf("%d\n", c); //输出13