首页 > 其他分享 >对补码的理解

对补码的理解

时间:2024-11-02 21:18:21浏览次数:5  
标签:运算 二进制 4bit 补码 数是 理解 十进制

计算机的本质就是计算,只不过和人不一样的是:我们是用十进制数计算,而计算机是用二进制数计算。基本的运算规则就是四则运算:加减乘除。
那么如何用二进制数进行四则运算呢?和用十进制数运算的方法一样吗?

第一个层面,我们要理解一个十进制数如何化成二进制数。比如十进制数16用二进制表示就是10000。
第二个层面,看到二进制数10000,就能肯定它等于十进制数16吗?不一定,我们也可以用它表示其他的十进制数,这取决与十进制数变成二进制数之间的变换规则。比如二进制数1100(12)加上二进制数100(4)变成10000,用这个10000代表12也可以。每一种变换规则都有其特定的含义和用途,如补码就是一种变换。
第三个层面,计算机用二进制数进行运算,那么运算的位数呢?是8位?还是64位?还是128位?这取决于计算机的硬件。常见的是64位,就是64个二进制数,占据内存8B。

假设某台计算机是4位的,那么它最多可以表示16个不同的数据。如图,左边是十进制数,右边是其对应的二进制数。
在这里插入图片描述
现在请大家先忘记教科书上讲的符号位,看下表:
在这里插入图片描述
如上图,4bit的补码能表示的十进制整数范围是[-8,7]。
其中,[0,7]的补码和二进制数是一样的,且其补码和二进制开头均为0。对于负数,-1的补码和15的二进制数一样,负数的补码开头均是1。
求5的补码:
5的二进制数是101,。这里用3bit就可以表示5,但是计算机是4bit的,我们就要用4bit来表示它,即表示为0101。因为5大于零,所以其补码和其二进制数一样。
求-6的补码:
-6的绝对值6的二进制数是0110。因为-6小于零,故求其补码要对它的二进制进行一定的转换,规则为:各位取反,再加1。0110各位取反变成1001,1001+1=1010,那么1010就是-6的补码。
求-9的补码:
4bit补码能表示的数值范围是[-8,7],那么-9无法用4bit的补码表示。
求补码1011对应的十进制数:
1011,首位是1,那么这个十进制数是负数。将该数减1,再各位取反,得到该数的绝对值的二进制数。即1011-1=1010,1010各位取反是0101.二进制0101对应的十进制是5.那么补码1011对应的十进制数是-5.
求补码0111对应的十进制数:
0111,首位是0,那么这个十进制数大于零。整数的二进制数和其对应的补码相同,故该数的二进制数为0111,对应十进制数7.

在补码里面,第一位可以判断对应十进制数的正负号,但它同时也是数值位的一部分,即同样参与运算。在运算中,运算结果也必须是[-8,7]范围内,否则会溢出,出现意料之外的数据。
在这里插入图片描述
举个溢出的情况
在这里插入图片描述
如果大家要用代码测试,可以试试这段代码:

#include<stdio.h>
int main(){	
	int a;
	a=2147483647+2147483647;	
	printf("%d\n",a);
	return 0;
}

在这里插入图片描述
最后有人可能想知道,为什么补码能进行四则运算(主要是减法)?
那么我的回答是:我也不太明白!!!

Over!

标签:运算,二进制,4bit,补码,数是,理解,十进制
From: https://blog.csdn.net/WSNACK/article/details/143439561

相关文章

  • 常见指令以及权限理解
    目录1.Linux下基本指令1.1ls指令1.2pwd命令1.3cd命令1.4touch指令1.5mkdir指令1.6 rmdir指令&&rm指令1.7man指令1.8cp指令1.9mv指令 1.10cat1.11more指令 1.12less指令1.13head指令 1.14tail指令1.15时间相关的指令1.16Cal指令1.17find......
  • JavaScript。—关于语法基础的理解—
    一、程序控制语句JavaScript提供了if、if else 和 switch 3种条件语句,条件语句也可以嵌套。(一)、条件语句1、单向判断: if...(1)概述<if>元素用于在判断该语句是否满足特定条件。如果条件不成立,<if>元素内的语句不会被执行。(2)语法格式if(条件){......
  • Java中“=”克隆理解
    在Java中,对于基本类型可以使用“="来进行克隆,此时两个变量除了相等是没有任何关系的。而对于引用类型却不能简单地使用”=“进行克隆,这与java的内存空间使用有关。Java将内存空间分成两块,即栈和堆。在栈中保存基本类型和引用变量;在堆中保存对象。对于引用变量而言,使用”=“......
  • 【MySQL系列】理解 `utf8mb4` 和 `utf8mb4_unicode_ci`
    ......
  • MapReduce理解
    解释下面是转载的一篇程序员给妻子讲解什么是MapReduce的对话,看完能大概明白我问妻子:“你真的想要弄懂什么是MapReduce?”她很坚定的回答说“是的”。因此我问道:我:你是如何准备洋葱辣椒酱的?(以下并非准确食谱,请勿在家尝试)妻子:我会取一个洋葱,把它切碎,然后拌入盐和水,最后放进混......
  • Windows 基础(一):深入理解Windows,掌握命令行与Shell
    内容预览≧∀≦ゞWindows基础(一)声明导语一、Windows和Linux的区别二、Windows的ShellShell和终端的区别1.命令提示符(CMD)2.WindowsPowerShell3.WindowsTerminal4.WindowsSubsystemforLinux(WSL)三、Windows常用命令1.文件与目录操作2.文本处理3.......
  • C语言原码、反码和补码的详解
    C语言原码、反码和补码的详解放在最前面的1、前言正数的原码、反码和补码负数的原码、反码和补码2、整数的原码(2.1)原码的定义(2.2)计算原码3、整数的反码(3.1)反码的定义(3.2)计算反码4、整数的补码(4.1)补码的定义(4.2)计算补码(a)正数的补码(b)负数补码5、原码、反码和补......
  • 图吧垃圾佬理解的早期国产芯片历史(龙芯中科和同行的恩怨解析)
    额……老铁们,我图吧老捡国产芯片垃圾的了。最近有人问咱关于国产芯片发展故事的事,所以咱简单答疑了一下顺带做了个记录的整理,简单看下情况。水友:就是我有个同学,已经魔怔了,现在已经在同学群里说天玑吊打国产芯片了前几天说的是吊打9950x…垃圾佬:吊打国产芯片可能是真的,9950x雀......
  • 深入理解指针(1)
    1:内存和地址1:内存我们知道计算机上面的CPU在处理数据时,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑时,电脑内存是8GB/16GB/32GB等,那这些内存空间如何高效管理呢?其实也是内存划分为一个个的内存单元,每个内存的大小取1个字节。一个bit(比特)位可以储存一......
  • 有Redis为什么还要本地缓存?谈谈你对本地缓存的理解?
    本地缓存是将数据存储在应用程序所在的本地内存中的缓存方式。既然,已经有了Redis可以实现分布式缓存了,为什么还需要本地缓存呢?接下来,我们一起来看。为什么需要本地缓存?尽管已经有Redis缓存了,但本地缓存也是非常有必要的,因为它有以下优点:速度优势:本地缓存直接利用本地内存,......