计算机不会做加法(位运算)
之前还有一个计算机的原码反码补码,这些比较简单 ,大家可以自行了解
不过要掌握一个思路
拿到一个二进制数据时 拿到数据(二进制)———> 搞清楚时以什么方式编码(视频还是txt)——————>根据不用方式的编码规则编码
一. 计算机的运算--(位运算)
二.为什么要学习位运算??
三.位运算
1.与运算
2.或运算
3.异或运算
4.非运算(取反)
5.左移动(相对简单)
6.右移
在汇编里面右移动 补0就用shr
右移动 补符号位就用sar
在c语言里面补0和补符号位用的都是>>
c语言会根据unsigned和int来判断你是有符号还是无符号数,然后决定补0还是
unsigned无符号
int计算机就是默认有符号
四.通过位运算实现四则运算
1. 比如4+5的运算过程
可以发现 在没有进位的情况下,加法和异或的结果一致
所以当计算机运算的时候,先 异或 在判断有没有 进位 再 异或
与运算是为了判断哪个位置出现进位这个位置出现进位
异或并没有将进位考虑过去
所以要把进位的结果和异或的结果再相加,注意的是 我们再次加的时候要把0000 0100 左移1位(因为有一个进位)
再判断是否有进位 与一下看是否为0 没进位了就是最终结果
整体过程
2.
4-5(其实也就是加法)
也就是4+(-5)负数的运算是以补码形式进行的
先异或 完事再与一下看看有没有进位 没有就完事了