常见的加减乘除赋值都是操作符,与计算有关的都是操作符。
如:
单目操作符
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度 |
~ | 对一个数的二进制按位取反 |
-- | 有前置和后置 |
++ | 如上 |
类似这种操作符还有很多,其中比较重要的有:
&按位与,|按位或,^按位异或操作符
&按位与:
int a = 3;
int b = 5;
int c = a & b;
printf("%d", c);//c = 1;
//该操作符是通过二进制补码来计算,同1则新值(c)为1,其余都为0;
//…………000000011+…………00000101 得 …………000000001
|按位或:
int a = 3;
int b = 5;
int c = a | b;
printf("%d", c);//c = 7
//其中按位或是其二进制补码有1则1,无1则0,然后在返回求原码
^按位异或:
int a = 3;
int b = 5;
int c = a ^ b;
printf("%d", c);//6
//按位异或,相同为0,相异为1
//相同的整数异或值为0,0与任何数异或都是本身
其中异或可以是一种状态,如3异或5值为3^5。
赋值操作符:
int a = 3;
int b = 5;
int c = 0;
int d = a = b = a + b;
printf("%d %d %d %d", a, b, c, d);//8 8 0 8
//这是从右到左的计算方式,依次赋值
移位标识符:
int a = 3;
int b = 3;
b = b >> 1;//这是b的二进制向后移动一位 就是除2
a = a << 1;//a的二进制向前移动一位 就是乘2
printf("%d %d", a,b);// 6 1
1<<4;//1*(2^4)
~的用法:
int a = 3;
a = ~a;
printf("%d", a);//-4
//~就是二进制取反
逻辑操作符:
int a = 0;
int b = -2;
int c = a && b;
printf("%d", c);//只会输出1和0都为正输出1,有一个假输出为0,只有a或者b为0才输出0
整形提升的目的是为了获取精度,一般常用于char提升为int
例子:
首先a = 00000101 b = 11001000
相加c = 11001101
但是要用整形输出,char需要整形提升为int,提升后11111111 11111111 11111111 11001101
注意,这是补码,然后求原码10000000 0000000 0000000 00110011
输出为-51
注意这里:里面补位是根据符号位,符号位是0就补0,是1就补1