【基础算法】位运算-基础篇

计算机里面的信息的交换是采用2进制的方式,因为机器只能识别0和1两个数字。所以有必要对位运算的知识做一个整理。

记得很多年以前,我刚上大一的时候,常常会想一个问题,为什么数组的第一个元素的下标是0,为什么字符串的首字母下标也是0?如果是1那不挺好嘛,省得下标换来换去特别麻烦。后来知道了,原来都是二进制惹的祸,因为2的0次方等于1,所以计算机里面用0代表1也就无可厚非了。

基础知识

原码+补码=0

补码=反码+1

例子1:0的相反数是0

0的原码    0 0...0 0

0的反码    1 1...1 1

0的补码 1 0 0...0 0 (1溢出,所以为0 0...0 0)


例子2:1的相反数是-1

1的原码    0 0…0 1

1的反码    1 1…1 0

1的补码    1 1…1 1


例子3:如果用二进制表示-1~-16 "(1)"代表这些数的前面全是1.如果是32位integer 0011代表28个1然后0011

-1~-16

(1)1 1 1 1,

(1)1 1 1 0,

(1)1 1 0 1, 

(1)1 1 0 0,

--------

(1)1 0 1 1, 

(1)1 0 1 0, 

(1)1 0 0 1,

(1)1 0 0 0,

--------

(1)0 1 1 1

(1)0 1 1 0

(1)0 1 0 1

(1)0 1 0 0

(1)0 0 1 1

(1)0 0 1 0

(1)0 0 0 1

(1)0 0 0 0


例子4:为什么极小值的相反数也是极小值

我们知道,在32位的integer型整数中,最小值是-2的31次方,它的补码也是它本身。为什么会出现这种情况呢?

我们先从2的31次方-1开始分析,因为2的31次方-1的相反数是-2的31次方+1

原码:  0 1…1 1

反码:  1 0…0 0

补码:  1 0…0 1

01…11代表2的31次方减1

10…01代表-2的31次方+1


那么怎么处理2的31次方呢?

原码:  10…00  

反码:  01…11

补码:  10…00

原码等于补码,所以说2的31次方是极大数也是极小数。即2的31次方=-2的31次方

由于10…00首位为1,符号位为1, 所以代表-2的31次方更加合适。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值