我是靠谱客的博主 朴实小懒虫,最近开发中收集的这篇文章主要介绍【计算机基础】整数的补码表示及负整数的左右移,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

作者:LogM
本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

文章难免有错误之处,请在原文评论处指出~

1. 补码的表示形式

计算机中整数用补码表示。

举例:假设数值类型为char型(8位)

十进制:8
原码:0000 1000
补码:0000 1000(正数的补码等于原码)
十进制:-8
原码:1000 1000
反码:1111 0111
补码:1111 1000(负数的补码等于反码加1)

2. 为什么用补码表示

用补码表示是为了使计算机的整数加法能用同一种电路完成,无论是正整数还是负整数。

建议阅读: LeetCode习题:位运算实现整数加法

3. 补码的本质

以-8为例:

十进制:-8
补码:1111 1000

可以发现,-8的补码与248的二进制表示竟然相同。

十进制:248
二进制:1111 1000

这是巧合吗?

char型共8位,所以有:

$$ 2^8 + (-8) = 248 $$

可能我解释不够清楚,小伙伴们可以自己用谷歌检索答案。

4. 负数的左右移

  • 左移:不断在右边补0,符号位会被移出,全移完是0
  • 右移:不断在左边补1,全移完是-1的补码
  • 观察可知:负数的右移不再严格对应整数除法的除2
十进制:-8
补码:1111 1000
左移后的补码:1111 0000(十进制-16)
右移后的补码:1111 1100(十进制-4)

十进制:-5
补码:1111 1011
左移后的补码:1111 0110(十进制-10)
右移后的补码:1111 1101(十进制-3,而整数除法的除2结果为-2,两者不对应)

最后

以上就是朴实小懒虫为你收集整理的【计算机基础】整数的补码表示及负整数的左右移的全部内容,希望文章能够帮你解决【计算机基础】整数的补码表示及负整数的左右移所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部