二进制数据的求取: 除2取余法
求13的二进制
13 ➗ 2 = 6... 1
6 ➗ 2 = 3... 0
3 ➗ 2 = 1... 1
1 ➗ 2 = 0... 1 ⬆️
结果是从下向上: 1101
一、左移运算符(<<)
左移位规则:
左边抛弃、右边补0
结果为原数乘以2的移位位数次方(如果最前面符号位是0才是2的倍数,0代表正数)

二、位操作符
位操作符用于对二进制数操作
按位取反~ 是单目运算符,优先级别比其余三个高
|
操作符 |
解释说明 |
|
按位与:& |
对两个二进制对应位都为1时,结果为1,否则为0 |
|
|按位或:| |
对两个二进制对应位只要有一个为1时,结果为1,否则为0 |
|
按位取反:~ |
对一个二进制数的每一位进行取反操作,将0变为1,将1变为0 |
|
按位异或:^ |
对两个二进制数的每一位进行异或操作,当两个对应位不相同时,结果为1,否则为0。 |
补码
按位取反(~):
int a = 3;
int b = ~a;
b的值应该这样去算:
C语言中int 类型值是有符号整数,用补码表示,补码最前面的符号位: 0表示正数,1表示负数
正数的补码是本身,负数的补码是正数取反,符号位保持不变加1的表示

备注: b的值~3是补码,符号位是1,是负数,需要取到原码得到结果,原本从补码到原码,是减1再取反,实际与取反再加1是等价的。 而且如果100 -1 = 011,0找前面借了1位后是2,最后借到1时,1-1 = 0
异或操作:
a^b^b = a; 对一个数做两次异或运算最后会得到它自己(其中原理是: 0^b = b本身,1^b=b反位)
三、其它操作符
逗号表达式: 依次计算每个表达式,并返回最后一个表达式的值作为整个表达式的值。
int a = 1, b = 2, c = 3;
int d = (a++, b++, ++c, a + b + c);
printf("a=%d\n",a);//a=2
printf("b=%d\n",b);//b=3
printf("c=%d\n",c);//c=4
printf("d=%d\n",d);//d=9
操作符优先级:
|
优先级 |
操作符 |
解释 |
|
1 |
()、 []、 ->、 . |
括号、数组、两种结构成员访问 |
|
2 |
!、~、++、--、+、-、*、&、(类型)、sizeof |
否定、按位取反、自增、自减、正号、负号、间接访问、地址访问、类型转换、内存大小 |
|
3 |
* 、/、% |
乘、除、取余 |
|
4 |
‘+、- |
加、减 |
|
5 |
<<、>> |
左移、右移 |
|
6 |
<、<=、>=、> |
小于、小于等于、大于等于、大于 |
|
7 |
==、!= |
等于、不等于 |
|
8 |
& |
按位与 |
|
9 |
^ |
按位异或 |
|
10 |
| |
按位或 |
|
11 |
&& |
逻辑与 |
|
12 |
|| |
逻辑或 |
|
13 |
?:: |
条件操作符 |
|
14 |
‘=、+=、-=、*=、/=、%= |
赋值、加等、减等、乘等、除等、取模等 |
|
15 |
, |
逗号运算 |

2753

被折叠的 条评论
为什么被折叠?



