[Note]对于补码的思考

补码是什么?

       我想先举一个例子,二进制中,假设我们用3个位表示3,对应二进制是011,2对应的二进制是010,2+3,对应的是011+010=101,对应的二进制是5。

       可以看到,在不溢出的情况下,加法在二进制中是显然成立的。那么,怎么计算减法呢?

在以前做数学题的时候,老师告诉过我一个特别有用的方法,那就是,遇到一个不会的问题的时候,就想办法把它转化成一个已经解决过的问题,然后用同样的方法解决它。运用这个方法论,我想把减法也转化成加法。

那么,怎么将减法转化成加法呢?例如,怎么把3-2=1转化呢?3加上一个什么数会等于1?为了得到答案,对3的二进制011进行研究,发现了,011+001=100,100+001=101,101+001=110,110+001=111,持续递增,在111+001=000,000+001=001,这里,数据虽然溢出了,但是011在连续加了6个1之后,等于了001。

所以,011+110=001,此时,用加法就实现了减法,依靠了溢出的机制。实现了减法,那么补码自然而然就出现了,3-2=3+(-2),为了表示-2,需要用补码来表示它,科学家规定-2的补码一定要保留110这个code,因为它方便用于计算。为了将它和6的二进制区分开,多增加一个bit,写成1_110,最高位为1时表示-2,为0时表示6。

验证一下,+3+(-2)=0_011+1_110=0_001,满足数学要求。

因此,补码的出现,其实是依靠了溢出的机制,计算x+(-y),应该说是先让第一个乘数x溢出,然后再加x-y+1,得到补码,所以,  (7-x)+(x-y+1)=8-y,因此-2的补码等于8-2=6,二进制1_110,-7的补码等于8-7=1,二进制1_001。

我们常说补码是源码取反加1,实际上取反,就是7-y的操作,取反加1就是7-y+1,等于8-y。

补码的英文是two's complement,对应的意思我猜测是“2^n的补充“, 正如在使用3bit的位数时,补码是2^3-y。

反码的英文是 One's complement,这是因为原码加上反码得到的是全为 1 的二进制,所以这个翻译的意思就是原码相对于全 1 的编码的补,也就是字面意思。

补码的英文是 Two's complement,一个 n 位的二进制数,其模为 $2^n$,一个负数 m 的补码即为 $2^n + m$,所以这里的翻译就是相对于模来说的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/217222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高压配电室智能运维

高压配电室智能运维是指通过运用先进的物联网、大数据、云计算等技术,对高压配电室进行智能化、远程化的运行维护,实现高压配电室的安全、高效、经济运行。以下是高压配电室智能运维的主要功能和优势: 实时监测:通过传感器和监测设…

Vue3引入markdown编辑器--Bytemd

字节跳动开源了一款markdown编辑器,bytemd,项目地址:GitHub - bytedance/bytemd: ByteMD v1 repository 安装 npm i bytemd/vue-next 引入方式如下,再main.js中引入样式 import bytemd/dist/index.css 直接封装一个Markdown编…

JavaEE进阶学习:SpringBoot 的创建和使用

1.什么是Spring Boot Spring 的诞生是为了简化 Java 程序的开发的,而 Spring Boot 的诞生是为了简化 Spring 程序开发的。 Spring Boot 翻译一下就是 Spring 脚手架,它就是为了快速开发 Spring 框架而诞生的 2.Spring Boot 优点 起步依赖 (创建的时候…

深入浅出理解kafka

1.Kafka简介 Kafka 本质上是一个 MQ(Message Queue),使用消息队列的优点: 解耦:允许独立的扩展或修改队列两边的处理过程。可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系…

Android,JNI开发和NDK之间的联系

Android,JNI开发和NDK。 1.jni和ndk jni是在jdk中就有出现的 在我们jdk路径中 D:\java\jdk11\include 这就是jdk中的jni Android开发环境中的ndk也有jni, D:\Android\sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\in…

数据结构第六课 -----链式二叉树的实现

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

价差后的几种方向,澳福如何操作才能盈利

在价差出现时,澳福认为会出现以下几种方向。 昂贵资产的贬值和便宜资产的平行升值。昂贵的资产贬值,而便宜的资产保持不变。昂贵资产的贬值和便宜资产的平行贬值,但昂贵资产的贬值速度更快,超过便宜资产。更贵的一对的进一步升值和…

python pyaudio对音频进行端点检测,检测出说话区间

python pyaudio对音频进行端点检测,检测出说话区间 主要采用过零率和语音能量来进行检测,并设置双阈值。 代码如下: # -*- coding: utf-8 -*- import wave import os import matplotlib.pyplot as plt import numpy as np# 判断是否变号 de…

大数据技术学习笔记(四)—— HDFS

目录 1 HDFS 概述1.1 HDFS 背景与定义1.2 HDFS 优缺点1.3 HDFS 组成架构1.4 HDFS 文件块大小 2 HDFS的shell操作2.1 上传2.2 下载2.3 HDFS直接操作 3 HDFS的客户端操作3.1 Windows 环境准备3.2 获取 HDFS 的客户端连接对象3.3 HDFS文件上传3.4 HDFS文件下载3.5 HDFS删除文件和目…

Lab 3: Recursion, Tree Recursion(CS61A 2020)

在网上没有lab3相应的答案,作者也卡蛮久 作者可能就自己的卡住过的问题做一些总结,不能面面俱到,请见谅 (就此补充一下答案)(完整答案在最后) Q2: WWPD: Journey to the Center of the Earth…

AcW730.机器人跳跃问题(二分法)-Java版

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;//由题目可知,无论能量大与小,都满足 e 2 * e - h[i]; //初始能量越大,最终的结果越大,要找到一个满足条件的最小值 //可以根据二分的向左找模板: /*if(check(mid)) r mid;els…

【C++ STL】vector类最全详解(什么是vector?vector类的常用接口有哪些?)

目录 一、前言 二、什么是vector ? 💦 vector的基本概念 💦vector的作用是什么 💦总结 三、 vector的(一维)定义 四、vector(一维)常用接口的使用 💦vector的常见构造(初始化) 💦vector…

11. 哈希冲突

上一节提到,通常情况下哈希函数的输入空间远大于输出空间,因此理论上哈希冲突是不可避免的。比如,输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一桶索引。 哈希冲突会导致查询结果错误&#…

探索人工智能领域——每日20个名词详解【day6】

目录 前言 正文 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以…

C++ 指针详解

目录 一、指针概述 指针的定义 指针的大小 指针的解引用 野指针 指针未初始化 指针越界访问 指针运算 二级指针 指针与数组 二、字符指针 三、指针数组 四、数组指针 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 指针与数组 一维数组 字符数组…

【C++】C/C++内存管理

前言: 前面我们已经学习了类与对象,认识了六个默认成员函数。这一篇文章我们来学习C/C内存管理,深入了解这套机制有利于我们之后写出更好的C/C程序。 一、C/C内存分布: 1.C/C中程序内存区域划分: 在C中,内…

多要素环境监测一体机-生态环境的守护者

随着人类活动的不断增加,环境问题日益凸显。为了实时了解环境状况,保护生态环境,一款多要素环境监测一体机应运而生。 一、实时监测,掌握环境动态 WX-CSQX12 多要素环境监测一体机能够实时监测空气质量、温湿度、噪音、风速等多…

SSM项目实战-前端-添加分页控件-调正页面布局

1、Index.vue <template><div class"common-layout"><el-container><el-header><el-row><el-col :span"24"><el-button type"primary" plain click"toAdd">新增</el-button></el-…

华清远见嵌入式学习——C++——作业3

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;class Per { private:string name;int age;double *high;double *weight; public://有参构造函数Per(string n,int a,double h,double w):name(n),age(a),high(new double(h)),weight(ne…

CoreDNS实战(一)-构建高性能、插件化的DNS服务器

1 概述 在企业高可用DNS架构部署方案中我们使用的是传统老牌DNS软件Bind, 但是现在不少企业内部流行容器化部署&#xff0c;所以也可以将Bind替换为 CoreDNS &#xff0c;由于 CoreDNS 是 Kubernetes 的一个重要组件&#xff0c;稳定性不必担心&#xff0c;于此同时还可将K8S集…
最新文章