前言

  • 所有的运算都是补码运算。
  • 正数的补码是其本身

负数补码的计算方式:

由原码到补码:原码除符号位以外全部取反得到反码,再加1得到补码。(取反区别于~按位取反运算符,按位取反运算符是包括符号位在内全部取反)
由补码到原码:亦为除符号位以外取反加1,需注意,若补码为正,此时原码和其本身相等,无需取反加1,若不理解,请阅读下文加法例子。

例如(为方便清晰本文以 8bit 类型为例):
-3 的原码:1000 0011
-3 的反码:1111 1100
-3 的补码:1111 1101

两个不同情况的加法例子:

例1:-3 + 2
2 的补码为其本身: 0000 0010
-3 的补码为:           1111 1101
两者相加所得补码 :1111 1111
此时补码为负,除符号位取反加1得到原码:1000 0001,即 -1

例2: -3 + 5
5 的补码:          0000 0101
-3 的补码:         1111 1101
相加所得补码:1 0000 0010
左边 1 溢出范围,舍去:0000 0010
此时补码为正,原码和补码相等,原码亦为:0000 0010,即 2

减法

为了方便与效率,计算机统一做加法,不会做减法,减去一个数即为加上这个数的负数。

例如:5 - 6,会被处理为 5 + (-6),按照以上加法规则运算。

正数位移运算

正数位移较为简单,满足以下规则:

  • 高位补 0
  • 低位补 0

例如
5 >> 1:0000 0101 -> 0000 0010 (2)
5 << 1:0000 0101 -> 0000 1010 (10)
(加粗的 0 是补上的,下面的例子也一样)

整体表现为:
右移 x 位代表除以 2x,向下取整
左移 x 位代表乘以 2x

负数位移运算

负数位移稍为特殊,满足以下规则:

  • 高位补 1
  • 低位补 0
  • 符号位不动

右移例子:
-15 >> 2:
-15 的原码:1 000 1111
补码:          1 111 0001
右移一次:   1 111 1000(此时为 -8 的补码)
右移第二次:1 111 1100
求得原码:    1 000 0100,即为 -4

左移例子:
-15 << 1:
-15 补码: 1 111 0001
左移:       1 110 0010
求得原码:1 001 1110,即为 -30

整体表现为:
右移 x 位代表除以 2x,向下取整
左移 x 位代表乘以 2x

彻底弄清补码加减法运算,正数、负数位移运算原理相关推荐

  1. java 负数 位移运算_Java中的位移运算

    在Java中,位移运算属于基本运算,符号是<>,即向左位移和向右位移.在Java中只有整数才能位移,所以其他的不考虑,位移运算是将整数在内存中表示的二进制进行位移,所以在Java中分为正数 ...

  2. 简单加减法(含负数)运算

    今天随手做了一个含负数的加减法运算器 首先导入一个头部文件 #include <iostream> #include <iomanip> using namespace std ...

  3. 定点运算——位移运算

    位移运算 前提:下述的移位运算推理过程是建立在合理的移位运算基础上的,即移位运算的结果和实际运算结果一致 位移运算的数学意义 位移运算,相当于小数点的移动,对数值进行扩大或者缩小进制数倍 左移运算,小 ...

  4. 二进制运算——位移运算

    位移运算 位移运算是我们既陌生又熟悉的二进制操作.陌生是指不易理解且不常用,熟悉是指"别人家的开发工程师"在代码中经常使用这种方式进行高低位的截取.哈希计算,甚至运用在乘除法运算中 ...

  5. java位移运算思路

    java位移运算针对的是补码 无符号右移指二进制补码整体右移一定位数,右边溢出,左边补0.语法表示为>>>.无符号右移的结果不小于0.没有无符号左移. 有符号左右移动,最高的符号位均 ...

  6. 定点补码加减法运算_计算机相关问题:谈谈我眼中的补码

    导读:补码是如何产生的.计算机如何表示负数. 1.前提认知 (1)计算机中只有加法器,加减法使用的都是加法器,同时计算机通过加法器左移累加实现乘法运算.右移累减实现除法运算. (2)补码是一种编码格式 ...

  7. 正数负数的原码,反码,补码

    转载自:https://blog.csdn.net/zj15527620802/article/details/80362535 转载自:http://www.01happy.com/computer ...

  8. 定点加减运算(补码加减法及溢出检测)

    本文只针对定点的加减运算(补码加减法实现),不涉及定点数的乘除运算以及浮点数运算 补码加减法 公式 补码加法: [x+y]补=[x]补+[y]补 [ x + y ] 补 = [ x ] 补 + [ y ...

  9. 计算机组成原理补码加法证明,补码加减法运算(计算机组成原理).ppt

    <补码加减法运算(计算机组成原理).ppt>由会员分享,可在线阅读,更多相关<补码加减法运算(计算机组成原理).ppt(25页珍藏版)>请在皮匠网上搜索. 1.计算机组成原理2 ...

最新文章

  1. CF1146H Satanic Panic
  2. beta冲刺(2/7)
  3. @查看MySQL版本的方法
  4. 表达式求值(from leetcode 241)
  5. debian+gnu/linux+9,Steam for Debian GNU/Linux
  6. c语言课程设计六角填数,关于蓝桥杯C语言B组的六角型答案问题
  7. OpenCV-Python实战(10)——详解 OpenCV 轮廓检测
  8. 新鲜出炉的头条面试算法
  9. 机房走线槽安装现场需要检查的内容
  10. Popclip的JSON格式化扩展
  11. 华为无线2020春招一面二面主管面-3.25
  12. Unity自定义创建脚本模板菜单
  13. 嵌入式应该怎么去学?-熊健-专题视频课程
  14. XML实现异构数据库间转换的实现与分析
  15. 互联网常见错误代码(如404)
  16. 支付宝扫一扫连接WIFI
  17. PackageManagerService安装应用流程
  18. spss数据处理--数据检查
  19. 英语语法---连接词详解
  20. C/C++语言入门——鸡兔同笼问题

热门文章

  1. android h5游戏图片不缓存,H5小游戏资源缓存方法与流程
  2. 想用 AI 在《MineCraft》挖矿躺赢?660 支队伍全部失败
  3. Python scrapy 实现网页爬虫
  4. android.bp 编译,Android编译系统中的Android.bp
  5. java编程电话号码查询_java课程设计电话号码查询系统(15页)-原创力文档
  6. 5G(一)——DNN及APN
  7. 10种常见的HTML标签错误写法
  8. 正则匹配空字符串 /(^\s)/
  9. QTableView基本用法讲解,Qt表格控件的使用方法
  10. sql优化和索引常见的面试题(面试总结)