二进制数的补码及运算(1)

二进制数的补码及运算(1)本人研究不深,如有错误请不吝赐教!!1.正数的补码表示正数的补码=原码负数的补码={原码符号位不变}+{数值位按位取反后+1}or={原码符号位不变}+{数值位从右边数第一个1及其右边的0保持不变,左边安位取反}以十进制整数+97和-97为例:+97原码=0110_0001b+97补码=0110_0001b-97原码=

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

本人研究不深,如有错误请不吝赐教!!

1.正数的补码表示

正数的补码 = 原码

负数的补码 = {原码符号位不变} + {数值位按位取反后+1}    or

     = {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}

以十进制整数+97和-97为例:

+97原码 = 0110_0001b

+97补码 = 0110_0001b

-97原码  = 1110_0001b

-97补码  = 1001_1111b

2.纯小数的原码

纯小数的原码如何得到呢?方法有很多,在这里提供一种较为便于笔算的方法。

以0.64为例,通过查阅可知其原码为0.1010_0011_1101_0111b。

操作方法:

将0.64 * 2^n 得到X,其中n为预保留的小数点后位数(即认为n为小数之后的小数不重要),X为乘法结果的整数部分。

此处将n取16,得

X = 41943d = 1010_0011_1101_0111b

即0.64的二进制表示在左移了16位后为1010_0011_1101_0111b,因此可以认为0.64d = 0.1010_0011_1101_0111b 与查询结果一致。

再实验n取12,得

X = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽略12位小数之后的位数情况下,计算结果相同。

3.纯小数的补码

纯小数的补码遵循的规则是:在得到小数的源码后,小数点前1位表示符号,从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”。

以-0.64为例,其原码为1.1010_0011_1101_0111b

则补码为:1.0101_1100_0010_1001b

当然在硬件语言如verilog中二进制表示时不可能带有小数点(事实上不知道哪里可以带小数点)。

4.一般带小数的补码

一般来说这种情况下先转为整数运算比较方便

-97.64为例,经查询其原码为1110_0001.1010_0011_1101_0111b

笔算过程:

-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小数点在右数第16位,与查询结果一致。

则其补码为1001_1110_0101_1100_0010_1001b,在此采用 负数的补码 = {原码符号位不变} + {数值位按位取反后+1}  方法

5.补码得到原码

方法:符号位不动,幅度值取反+1 or符号位不动,幅度值-1取反

-97.64补码 = 1001_1110(.)0101_1100_0010_1001b

取反      = 1110_0001(.)1010_0011_1101_0110b

+1         = 1110_0001(.)1010_0011_1101_0111b 与查询结果一致

6.补码的拓展

在运算时必要时要对二进制补码进行数位拓展,此时应将符号位向前拓展。

-5补码 = 4’b1011 = 6’b11_1011

ps.原码的拓展是将符号位提到最前面,然后在拓展位上部0.

-5原码 = 4‘b’1101 = 6’b10_0101,对其求补码得6’b11_1011,与上文一致。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179643.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring boot框架搭建_springboot工作原理

    spring boot框架搭建_springboot工作原理公司大部分的应用程序都使用springboot开发,作为测试人员,学习了解该框架也势在必行。此外作为想成长为测试开发的同学来说,使用springboot开发后端服务也是一项基本的技能。

    2022年8月20日
    6
  • ie11兼容性视图设置怎么能自动兼容_ie11兼容模式ie8

    ie11兼容性视图设置怎么能自动兼容_ie11兼容模式ie8ie11浏览器不兼容的解决办法Edge浏览器已然成为最新win10系统的默认浏览器,但是用户量却远远不及IE11,IE11虽然性能得到了大的改进,但在浏览网页的时候还是会出现一些兼容性的问题,下面小编就讲为大家分享IE11浏览器网页不兼容的四个有效解决方法。方法一、添加受信任的站点1、打开IE11浏览器,点击浏览器右上角的“工具”选项,再选择“Internet选项”;2、点击界面的上方的“安全…

    2025年10月2日
    4
  • 关于解决token过期失效问题「建议收藏」

    关于解决token过期失效问题「建议收藏」关于解决token过期失效问题,用户对token无感知(实现免登陆)一、先认识下token二、整体思路三、实现步骤1.理清各个文件作用2.路由导航守卫3.封装localStorage方法4.vuex5.封装axios实现请求拦截器和响应拦截器(重点部分)四、小结一、先认识下token二、整体思路三、实现步骤1.理清各个文件作用2.路由导航守卫设置用户有无token访问主页,并且登录成功回到目标页importVuefrom’vue’importVueRouterfrom’v

    2025年11月2日
    2
  • 什么是Boot Loader

    什么是Boot Loader

    2021年7月31日
    47
  • 信息熵、信息增益、信息增益比「建议收藏」

    信息熵、信息增益、信息增益比「建议收藏」信息熵“信息熵”是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占的比例为pk(k=1,2,…,|y|),则D的信息熵定义为:Ent(D)的值越小,则D的纯度越高。如果上面的解释不容易理解,那么下面再通俗地解释一下:首先来看一下信息熵这个公式在数轴上的表示:可以看到,在概率为0.5的时候,信息熵是最大的(为1)。我们可以把信息熵理解为“不确定性”,当概率为0.5…

    2025年5月25日
    3
  • 新型数据库推荐,大数据时代数据库SCSDB

    新型数据库推荐,大数据时代数据库SCSDB

    2022年3月12日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号