导读:位运算,字如其名,学着学着就跑到计算机组成原理中去了,真是噩梦!如果是普通的加减乘除还好,直接进行位运算,小懂也做不了啊!没办法,这部分比较重要,还是学吧!
位运算
进制
进制转换和原、反(弥补减法)、补(弥补两个0的表示)我不想啰嗦了……
位运算
计算机采用的是二进制,二进制包括两个数码:0,1。在计算机的底层,一切运算都是基于位运算实现的。
位运算共有 6 种,分别是:与、或、异或、取反、左移和右移,其中左移和右移统称移位运算,移位运算又分为算术移位和逻辑移位。上述位运算中,只有取反是一元运算,其余的都是二元运算。
与、或、异或和取反:
- 与运算的符号是 &,运算规则是:对于每个二进制位,当两个数对应的位都为 1 时,结果才为 1,否则结果为 0
- 或运算的符号是 ∣,运算规则是:对于每个二进制位,当两个数对应的位都为 0 时,结果才为 0,否则结果为 1。
- 异或运算的符号是 ⊕(在代码中用 ∧ 表示异或),运算规则是:对于每个二进制位,当两个数对应的位相同时,结果为 0,否则结果为 1。
- 取反运算的符号是 ∼,运算规则是:对一个数的每个二进制位进行取反操作,0 变成 1,1 变成 0。
移位运算:移位运算按照移位方向分类可以分成左移和右移,按照是否带符号分类可以分成算术移位和逻辑移位
- 左移运算的符号是 <<。左移运算时,将全部二进制位向左移动若干位,高位丢弃,低位补 0。对于左移运算,算术移位和逻辑移位是相同的
- 右移运算的符号是 >>。右移运算时,将全部二进制位向右移动若干位,低位丢弃,高位的补位由算术移位或逻辑移位决定(正数都是逻辑右移):
算术右移时,高位补最高位;逻辑右移时,高位补 0
训练经验总结
要想获取一个位数的值(0 或1),做法是把她和1按位与,当这个位也为1的时候输出1,当这个为0的时候输出0(颠倒二进制位)
当进行加法的时候,进位数可以看作是按位与左移一个位置(向高位移),没有进位的数可以看作是异或运算的值(两整数之和),当求到没有进位的时候说明可以直接计算得到结果。
- 进位部分:只有当两个数都是 1 时,才会发生进位,进位部分的值是 10,因此进位部分可以看成是两个数的按位与的结果左移一位
- 非进位部分:当两个数相同时非进位部分的值是 0,当两个数不同时非进位部分的值是 1,因此非进位部分可以看成是两个数的按位异或的结果