揭秘二进制之谜:为何-128与+128的二进制表示相同,都是1000 0000?

news2024/11/28 18:47:29

8位有符号整数-128的二进制码是1000 0000,而+128的二进制码也是1000 0000,你是不是觉得很奇怪?

下面就让我来解释一下。

从-128到127的跨越

8位二进制数能够表示2^8共256个不同的值,从0000 0000到1111 1111。在8位有符号整数的世界,它的取值范围从-128到+127,其中负数128个,正数(包括0)128个,负数是-1到-128,因为有0的存在,所以正数是0到127。

在一个8位有符号整数系统中,最大能表示的正数是+127(0111 1111),因为最高位(即最左边的位)被用作符号位,0表示正数,1表示负数。

因此,128实际上不能用一个8位有符号整数直接表示。128的16位二进制表示是0000 0000 1000 0000,这里,最高位是0,表示它是正数。

二进制如何表示负数呢?

二进制表示正负数时,一般会把最高位当做符号位,符号位0表示正数,1表示负数,那么-1用二进制怎么表示呢?1用二进制表示为00000001,所以推算一下-1应该就是10000001吧?让我们来验证一下,看看对不对,十进制 1 +(-1)= 0,二进制 00000001 + 10000001 = 10000010 很明显不等于0 啊。

我们知道二进制1是00000001,那么我们倒推一下,00000001加上什么数会等于00000000呢?

想来想去都想不到啊,不知道你有没有发现,计算机是没有减法运算的,计算机的减法是通过加法实现的,那么加法怎么能达到减法的效果呢?

我们看下这个例子:

在这里插入图片描述

1 00000000超出了一个字节的范围,最高位1被舍弃,剩下的就是 00000000,这就是十进制的0啊,推理可得-1用二进制表示就是11111111,好神奇,原来二进制的负数表示叫做补码,补码的转换规则是正数的取反再加1

比如:00000001 取反就是 11111110,然后再加1就是11111111,这就是-1的二进制表示了。

仔细想想所谓补码,就是加起来等于11111111的码啊,然后再加1,最高位溢出后,不就等于0了吗,一个和原来的数加起来等于0的数不就是它的负数吗?

这么想是不是就容易理解了呢?

如果你想了解计算机如何计算减法的,可以看下这篇文章:
计算机只会加法,那么它如何用加法来计算减法呢?

-128的独特之处

在8位有符号整数的范围内,-128占据了一个独特的位置。它不能通过常规的取反加1操作来得到,因为这样会超出8位的限制。因此,-128直接用1000 0000来表示,这在补码表示法中是一个例外。尽管这个表示也可以理解为+128的形式,但在8位有符号整数系统中,它被唯一地识别为-128。

如果把第一个数看成符号位的话1000 0000转换成十进制就是-0,但是-0没有意义,所以就拿来表示-128了。

验证

我们来验证一下,如果我们尝试将-128转换回正数,我们会先减1,得到0111 1111,然后取反,得到1000 0000,这代表正数128。所以,这验证了-128的二进制补码表示确实是1000 0000。

最后,我们再来看下8位有符号整数和16位有符号整数中-128的表示方法。

8位有符号整数

  • 128:在8位有符号整数中,128实际上是无法表示的,因为8位有符号整数的取值范围是-128到127。如果我们试图表示128,它会超出这个范围。
  • -128:在8位有符号整数中,-128是一个特殊情况,其二进制表示是1000 0000。这里,最高位(1)表示它是负数,其余位(000 0000)与128的正数表示相似,但在8位有符号系统中,它被理解为-128。

16位有符号整数

在16位有符号整数中,我们有足够的位来表示这两个数,因为16位有符号整数的范围是-32768到32767。

  • 128:128的16位二进制表示是0000 0000 1000 0000。这里,最高位是0,表示它是正数。
  • -128:-128的16位二进制表示是1111 1111 1000 0000。在这种情况下,最高位是1(表示它是负数),其余位是128的二进制表示的补码。

所以,-128的二进制码1000 0000是二进制补码表示法的一个特例。

同样的在16位有符号整数中,-32768是16位有符号整数中能表示的最小数,它的二进制补码表示是1000 0000 0000 0000,也是一个特例。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2024】大三寒假再回首:缺乏自我意识是毒药,反思和回顾是解药

2024年初,学习状态回顾 开稿时间:2024-1-23 归家百里去,飘雪送客迟。 搁笔日又久,一顾迷惘时。 我们饱含着过去的习惯,缺乏自我意识是毒药,反思和回顾是解药。 文章目录 2024年初,学习状态回顾一…

带大家详细了解msvcr120.dll丢失的原因,msvcr120.dll丢失怎样修复的方法

在使用电脑和运行应用程序时,我们经常会遇到与动态链接库(Dynamic Link Library, DLL)文件相关的错误。其中之一是 "msvcr120.dll 丢失" 的错误提示。今天我们就来详细的了解一下msvcr120.dll这个文件和分享msvcr120.dll丢失怎样修…

18- OpenCV:基于距离变换与分水岭的图像分割

目录 1、图像分割的含义 2、常见的图像分割方法 3、距离变换与分水岭介绍 4、相关API 5、代码演示 1、图像分割的含义 图像分割是指将一幅图像划分为若干个具有独立语义的区域或对象的过程。其目标是通过对图像进行像素级别的分类,将图像中不同的区域或对象分离…

MySQL原理(四)索引(3)索引失效与索引区分度

一、索引失效: 首先未使用索引列作为查询条件索引是肯定会生效的,还有其他的情况,索引列做为了查询条件也失效了: ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(NAME, age, pos); 1、select 语句、order by语句&#xf…

TensorFlow2实战-系列教程5:猫狗识别2------数据增强

🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 猫狗识别1 数据增强 猫狗识别2------数据增强 猫狗识别3------迁移学习 1、猫狗识别任…

国家级专精特新“小巨人”第一至五批名单

国家级专精特新“小巨人”第一至五批名单 1、来源:工信部 2、样本量:1.29W第一批企业共248家,A股上市35家;第二批企业共1744家,A股上市157家;第三批企业共2930家,A股上市119家;第四…

【C++干货铺】哈希结构在C++中的应用

目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 1.unordered_map的构造 2. unordered_map的容量 3. unordered_map的迭代器 4. unordered_map的元素访问 5. unordered_map的查询 6. unordered_map的修改操作 7. unordered_map的桶操作 底层结构 …

【知识点】设计模式

创建型 单例模式 Singleton:确保一个类只有一个实例,并提供该实例的全局访问点 使用一个私有构造方法、一个私有静态变量以及一个公有静态方法来实现。私有构造方法确保了不能通过构造方法来创建对象实例,只能通过公有静态方法返回唯一的私…

Qt实现窗口吸附屏幕边缘 自动收缩

先看效果: N年前的QQ就可以吸附到屏幕边缘,聊天时候非常方便,不用点击状态栏图标即可呼出QQ界面 自己尝试做了一个糙版的屏幕吸附效果。 关键代码: void Widget::mouseMoveEvent(QMouseEvent *e) {int dx e->globalX() - l…

C语言基础:写一个函数,输入一行字符,将此字符串最长的单词输出

方法一&#xff1a; #include<string.h> int find_longest(char line[])//把数组传过来 {int is_alphabetic(char word);int i 0;int length 0;//统计每个字符串的长度int max 0;//比max长就把值赋值给maxint place 0;//最长单词的起始位置int point;//每个字符串第…

暴搜,回溯,剪枝

力扣77.组合 class Solution {List<List<Integer>>retnew ArrayList<>();List<Integer>pathnew ArrayList<>();int n; int k;public List<List<Integer>> combine(int _n, int _k) {n_n;k_k;dfs(1);return ret;}public void dfs(int…

2024斋月大促跨境卖家准备指南

市场覆盖西欧、中东、东南亚、北非地区的跨境电商卖家注意了&#xff0c;2024年的斋月即将开启&#xff0c;较往年日期&#xff0c;今年提前了10天左右&#xff0c;斋月的第一天预测在3月11日星期一到来。 根据Google搜索数据可知&#xff0c;目前已经进入高频“斋月”搜索期&…

小米商城服务治理之客户端熔断器(Google SRE客户端熔断器)

目录 前言 一、什么是Google SRE熔断器 二、Google SRE 熔断器的工作流程&#xff1a; 三、客户端熔断器 (google SRE 熔断器) golang GRPC 实现 四、客户端熔断器 (google SRE 熔断器) golang GRPC单元测试 大家可以关注个人博客&#xff1a;xingxing – Web Developer …

K8S网络

一、介绍 k8s不提供网络通信&#xff0c;提供了CNI接口(Container Network Interface&#xff0c;容器网络接口)&#xff0c;由CNI插件实现完成。 1.1 Pod通信 1.1.1 同一节点Pod通信 Pod通过虚拟Ethernet接口对&#xff08;Veth Pair&#xff09;与外部通信&#xff0c;Veth…

银河麒麟v10服务器版,specvirt测试

1 两台服务器&#xff0c;一台为SUT&#xff0c;一台为Phyclient。 1.1 两台服务器均编译安装gcc和qemu 按银河麒麟v10服务器arm版&#xff0c;qemugcc&#xff0c;跨架构安装虚拟机中步骤&#xff0c;编译安装gcc-9.3.0和qemu-7.0.0。 2 SUT服务器操作 2.1 mount数据盘到/…

如何发布自己的npm包:

1.创建一个打包组件或者库&#xff1a; 安装weback&#xff1a; 打开项目&#xff1a; 创建webpack.config.js,创建src目录 打包好了后发现两个js文件都被压缩了&#xff0c;我们想开发使用未压缩&#xff0c;生产使用压缩文件。 erserPlugin&#xff1a;&#xff08;推荐使用…

搭建 idea 插件仓库私服

正常情况下&#xff0c;我们开发的 idea 插件会发布到 idea 官方商城中&#xff0c;这样用户就可以在 idea 的 Marketplace 中搜索安装。 但是在企业内部&#xff0c;有可能我们开发了很多内部插件&#xff0c;而不能发布到公共市场中&#xff0c;这种情况下我们就需要搭建一个…

css多行文本擦拭效果

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>多行文本擦拭效果</title><style>* …

black--一键格式化Python代码

black black是一个Python代码格式化程序&#xff0c;使用它可以免于在调整代码格式上花费时间。black被许多大大小小的项目成功使用&#xff0c;包括pytest, tox, Pyramid, Django等。 格式化效果&#xff1a; 可以在线查看格式化效果&#xff1a;https://black.vercel.app/…

ERP系统助力车间生产:班组、设备、工序一网打尽!实现生产全流程可视化!

​随着企业生产规模的扩大和业务复杂性的增加&#xff0c;车间管理在企业运营中的地位日益突出。ERP系统作为企业资源管理的核心平台&#xff0c;为车间管理提供了全面的解决方案。通过合理配置和使用ERP系统的功能模块&#xff0c;企业可以优化生产流程、提高生产效率、确保产…