记录 位运算 的使用心得 与原码补码 反码

1、判断奇数偶数 最先想到的是 模2运算

     这里有个小技巧:奇数 num&1==1 ;偶数 num&1==0(或者!=1)

     使用时最好加上括号(),在牛客网测试时没加括号,导致不能通过用例!


---------------------------------------分割下-----------------------------------------------------------

2 、总结下 原码补码 反码


        原(补、反)码在计算机中用来表示带符号数的,所以它的本质还是数。既然是数字,数字发明出来就是用来计量的(数数的),而计量系统必然存在两个核心元素------容量和精度。容量就是这个计数系统包含的所有的状态个数,又称为

1位10进制数,容量为10,0至9,一共10个数;

2位10进制数,容量为100, 0至99,一种100个数;

1位二进制数,容量为2,0、1,一共两个数;

8位二进制数,容量为256,00000000到11111111;

钟表,容量为12,1到12,共12个状态;(什么你说还有分和秒,这位同学你出)


以钟表为例,假设时针指在12点,

顺时针转1下,到1点,逆时针转11下也到1点。

顺时针转2下,到2点,逆时针转10下也到2点

。。。

顺时针转11下,到11点,逆时针转1下也到11点


用数学语言表述就是 

顺时针12+1=13,13-12=1,因为13不在计量系统内,需舍弃掉进位;逆时针12 -11 = 1,

顺时针12+2=14,14-12=1,因为14不在计量系统内,需舍弃掉进位;逆时针12 -10 = 11 ,

=2

    顺12+11=23,23-12=11;逆 12-1=11

可以看到模为12的情况下,12+1 和12-11的结果是一致的。同样的 12 +2 =12 -10,等等,我们称1和11,2和10 这样的数互为补数。也就是说在钟表计量系统内 减法可以通过加法来实现-------减去一个数就等于加上这个数的补数。先记下这个法则。

求补数。观察钟表,我们发现,互为补数的两个数,它们的和即为钟表计量系统的模。也就是A的补数=模-A。我们在前面举了很多计量系统,并给出了他们的模。一个计量系统(以0开始计数,精度为1)的模等于计量系统内最大值加1。(钟表计数从1开始)

  回归计算机。数值表示有原码了,为什么还要用补码?原来,计算机中只有加法器,没有减法器。主要是因为减法器门电路设计太复杂,不划算。那怎么才能实现减法呢?当当当,上面提到的法则告诉我们了,有木有! 减去一个数 等效于加上这个数的补数。这样就可以通过加法器来实现减法了。以9-5为例,5的补数就是应该是模减5,模等于最大值11111111加1,11111111+1-00000101 = 11111111 - 00000101 +1。是不是想起了什么?没错,这不就是传说中的补码求解方法----取反加1 么。所以在计算机中负数直接存储为它的补数,也就是用补码表示。正数的原码与补码相同,所以计算机将数值都直接用补码表示。

这里有个小问题,+0 原码是00000000 ,-0的原码是10000000。而0的补码只有一个00000000. 10000000用来表示-128,这一点尚未搞清。




      



      

    


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值