1.原码反码补码
二进制存储在计算机里的其实是补码
正数的原码反码补码都是一样的
我们拿负数的原码补码反码进行分析
例如-2的原码是10000000000000000000000000000010第一个数字代表的是符号的正负位
反码是除了符号位全部都取反11111111111111111111111111111101
补码是反码+1 111111111111111111111111111111110
这里为什么计算机采用补码而不采用原码的呢有个例子
2的原码是00000000000000000000000000000010如果我们采用原码相加的话就会得到
10000000000000000000000000000100就会得到-4
这时我们用补码进行计算试试上面的两个一相加就会向前进0变为
0000000000000000
这个是摘自小红书博主71 🍑白桃书生发布了一篇小红书笔记,快来看吧! 😆 CLZdHQBx2Q62GDN 😆 http://xhslink.com/guzoWI,复制本条信息,打开【小红书】App查看精彩内容!
本章节主要讲述了位操作符& | ^ >> <<
1.&按(2进制)位与
两个操作符的二进制位对应的有0则为0
例如6的补码00000000000000000000000000000110
-7的补码11111111111111111111111111111001
所以6&-7为00000000000000000000000000000000所以得到的是0
2.| 按(2进制)位或
两个操作符对应的二进制位的只要有1就是1,两个同时为0才是0
还是上面的
例如6的补码00000000000000000000000000000110
-7的补码11111111111111111111111111111001
得到的补码为11111111111111111111111111111111
我们取反加一得到的原码是10000000000000000000000000000001为-1
3.^按(2进制)位异或
规则是两个相同的才为0,两个相异的为1
例如6的补码00000000000000000000000000000110
-7的补码11111111111111111111111111111001
6^-7的补码为10000000000000000000000000000000
原码为100000000000000000000000000000001是-1
4.<<左移操作符
移动的是存储在内存中的二进制位(补码)
例如10<<1左移一位
00000000000000000000000000001010
左移一位右边补0是左移操作符的计算规则
5.>>右移操作符
右移运算分两种
分别是逻辑右移和算术右移
逻辑右移 左边用0填充,右边丢弃
算术右移 左边用原该值的符号位填充,右边丢弃
这取决于编译器的操作环境,一般都采用的是逻辑右移
下面会写几篇有关于位操作符与移位操作符的一些编程代码