二进制位运算,原码,反码,补码入门

目录

学习目标:

学习内容:

位运算符号

位运算技巧

原码、反码,补码

原码:

反码:

补码:

补码的思想:

为什么负数的补码的求法是反码+1


学习目标:

使用二进制方法解决如下题目
N 皇后问题
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/n-queens/solution/nhuang-hou-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


学习内容:

位运算符号

符号解释示例
~数按位取反,0变为1,1变为0~1=0;~0=1
&全为1,结果才为10&0=0;0&1=0;1&0=0;1&1=1;
|只要有一个为1,结果就为10|0=0;0|1=1;1|0=1;1|1=1
^两个值不同,则该位结果为1,否则为00^0=0;0^1=1;1^0=1;1^1=0;
>>将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃101>>1=110;011>>1=001
>>>各个位向右移指定的位数。右移后左边空出的位用0来填充,移出右边的位被丢弃101>>>1=010;011>>1=001
<<将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)2<<1=4;


位运算技巧

运算目标
x&(-x)获取二进制中最后一个1
x&(x-1)去除二进制中最后一个1
(n & 1) == 1判断奇偶,奇数位1偶数位0

原码、反码,补码


看了些文章,大概描述反码,补码出现的原因是由于运算器,只有加法运算器,计算机中的没法直接做减法的。原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。

符号位:任何存储于计算机中的数据,其本质都是以二进制码存储。如使用符号位,则使用最高位代表符号位,如果该位为0,则说明该数为正;若为1,则说明该数为负。


参考资料如下:
二进制的原码、反码、补码 - 知乎
百度安全验证
补码_百度百科

原码:


是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。

符号位引起的问题:

0001+0010=0011,1+2=3;
0000+1000=1000,+0+(-0)=-0;
0001+1001=1010,1+(-1)=-2。


反码:


反码计算方式:正数的反码还是等于原码;负数的反码就是它的原码除符号位外,按位取反。

符号位引起问题:

0001+1110=1111,1+(-1)=-0;
1110+1100=1010,(-1)+(-3)=-5。


补码:


补码计算方式:正数的补码等于它的原码;负数的补码等于反码+1。

补码的思想:


        在介绍补码概念之前,先介绍一下“模”的概念:“模”是指一个计量系统的计数范围,如时钟。计算机也可以看成一个计量机器,因为计算机的字长是定长的,即存储和处理的位数是有限的,因此它也有一个计量范围,即都存在一个“模”。如:时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^n-1,模=2^n.“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算 。
        假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6。在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。对“模”而言,2和10互为补数。实际上,以12为模的系统中,11和1,8和4,9和3,7和5,6和6都有这个特性,共同的特点是两者相加等于模
        对于计算机,其概念和方法完全一样。n位计算机,设n=8,所能表示的最大数是11111111,若再加1成100000000(9位),但因只有8位,最高位1自然丢失。又回到了 00000000,所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。
        由于补码表示中的符号位可以与数值位一起参加运算,并且可以将减法转换为加法进行运算,简化了运算过程,因此计算机中均采用补码进行加减运算。
        故在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理

为什么负数的补码的求法是反码+1


        因为负数的反码加上这个负数的绝对值正好等于11111111,在加1,就是100000000,也就是八位二进数的模。可以通过模减去负数的绝对值得到它的补码,所以负数的补码就是它的反码+1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值