[转帖]计算机二进制的源码、反码、补码详讲解

计算机,二进制,源码,反码,补码,讲解 · 浏览次数 : 0

小编点评

**原码** :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。 **反码** :正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。 **补码** :正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。

正文

一、原码、反码、补码的概念

原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。

反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。 

补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。

二、示例

例如 十进制数字: +7 

7=2^2+2^1+2^0     假设计算机字长为8位,最高位为符号位,转换成二进制就是00000111

原码: 00000111

反码:00000111

补码:00000111

例如 十进制数字:-7 

7=2^2+2^1+2^0     假设计算机字长为8位,最高位为符号位,转换成二进制就是10000111

原码: 10000111

反码:11111000  高位不变,其他取反

补码: 11111001  反码+1

例如 将补码 11111001  转换为原码

补码: 11111001

符号位不变,数值位取反:10000110

加1后得到原码:10000111

补码变成原码的方式是:正数的补码与原码一致,负数的补码按位取反加1,符号位不变

反码变成原码的方式是:正数的反码与原码一致,负数的补码按位取反,符号位不变

原码、反码、补码 0的问题
用4位二进制原码表示0:-0=1000   +0=0000 

用4位二进制反码表示0:-0=1111   +0=0000 

用4位二进制补码表示0:-0=0000   +0=0000 

000  -->  0

111  -->  7

原码、反码、补码 表示范围
n+1位数字,绝对值最大的原码是  -(2^n - 1)和 2^n - 1

n+1位数字,绝对值最大的反码是  -(2^n - 1) 和 2^n - 1

n+1位数字,绝对值最大的补码是  -2^n

例如

原码:

二进制无符号000~111      十进制0~ 7  0 ~ 2^3-1

二进制有符号0000~0111    十进制0~7   0 ~ 2^3-1

二进制有符号1111~1000   十进制-7~0   -(2^3-1) ~ 0

综上所述:4位原码的表示范围: -(2^3 - 1) ~ 2^3-1                   

用4位二进制原码表示的范围 1111~0111可以表示15个十进制数字 -(2^3 - 1) ~ 2^3-1

用4位二进制反码表示的范围 1000~0111可以表示15个十进制数字 -(2^3 - 1) ~ 2^3-1

用4位二进制补码表示的范围 1000~0111 可以表示16个十进制数字 -2^3 ~ 2^3-1

补码:位数一定,绝对值最大的补码是符号位是1,数值位全为0

用4位补码数字表示 -8: 1000

4位数字,绝对值最大的原码是  1111 和 0111  -7和7   -(2^3-1) 和 2^3-1

4位数字,绝对值最大的反码是  1000和 0111 -7和7

4位数字,绝对值最大的补码是  1000   -2^3   -8

对一下十进制数字排序 从小到大

-001 001 -011 011 -101

-101<-011<-001<001<011

对一下二进制数字排序  从小到大

1001 0001 1011 0011 1101

1101<1011<1001<0001<0011

二进制转十进制
无符号二进制    十进制     加1后的二进制    加1后十进制
1    2^1 – 1    10    2^1
11    2^2 – 1    100    2^2
111    2^3 – 1    1000    2^3
1111    2^4 – 1    10000    2^4
111……111 n个1    2^n – 1    1000……000  n个0    2^n
将原码:10101,01001 转成十进制数

10101 = -1*2^2 + 1*2^0

01001 = 1*2^3 + 1*2^0
 

</article>

与[转帖]计算机二进制的源码、反码、补码详讲解相似的内容:

[转帖]计算机二进制的源码、反码、补码详讲解

一、原码、反码、补码的概念 原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。 反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。 补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。 二、示例 例如 十进制数字: +

[转帖]玄铁C910微架构学习(11)——缓存系统的数据预取技术

玄铁C910微架构学习(11)——缓存系统的数据预取技术 https://zhuanlan.zhihu.com/p/487605742 一、源码中的数据预取部分的文件结构 二、全局预取模式 2.1产生步幅的整体控制逻辑 2.2 步幅的计算 2.3 步幅的检查 2.4 监视步幅,动态调整预取的开始和停

[转帖]Java和Scala的前世今生

第一部分:Java 计算机语言介绍 第一代语言:机器语言。指令以二进制代码形式存在 第二代语言:汇编语言。使用助记符表示一条机器指令 第三代语言:高级语言 C、Pascal、Fortran面向过程的语言 C++面向过程/面向对象 Java跨平台的纯面向对象的语言 .NET跨语言的平台 Python、

[转帖]「开源摘星计划」Prometheus监控Harbor(二进制版)

推荐 原创 键客李大白2022-08-08 11:35:07博主文章分类:Harbor进阶实战(企业实战)©著作权 文章标签云原生运维Harbor文章分类kubernetes云计算私藏项目实操分享阅读数10000+ 本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:​ ​https://g

[转帖]Linux性能分析(二):理解CPU上下文切换

在计算机中,上下文切换是指存储进程或线程的状态,以便以后可以还原它并从同一点恢复执行。这允许多个进程共享一个CPU,这是多任务操作系统的基本功能。 Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行,这依赖于CPU上下文切换。CPU 上下文切换,就是先把前一个任务的 CPU

[转帖]Linux命令之ulimit命令

一、命令简介 ulimit是一个计算机命令,用于shell启动进程所占用的资源,可用于修改系统资源限制。使用ulimit命令用于临时修改资源限制,如果需要永久修改需要将设置写入配置文件/etc/security/limits.conf。 二、使用示例 1、查看当前资源限制设置 [root@test1

[转帖]linux shell 脚本一些主要知识点整理

文章目录 一、/bin/sh 与 /bin/bash 的区别二、vi与vim的区别三、shell变量四、Shell字符串五、Shell函数六、Shell基本运算符1、Shell expr:进行整数计算2、Shell (()):对整数进行数学运算3、Shell let:对整数进行数学运算4、Shell

[转帖]Vxlan基础理解

一 . 为什么需要Vxlan 1. vlan的数量限制 4096个vlan远不能满足大规模云计算数据中心的需求 2. 物理网络基础设施的限制 基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署 3. TOR交换机MAC表耗尽 虚拟化以及东西向流量导致更多的MAC表项 4. 多租户场景 I

[转帖]shell编程之循环语句

目录 一、循环语句for循环for语句的结构嵌套循环 while语句的结构while语句应用示例 until语句的结构until语句示例 二、跳出循环continue跳出循环break跳出循环 三、常用循环脚本实例循环打印9*9乘法表数字累加脚本(1-100)常用转义字符购物shell 计算器正等腰

[转帖]总结:协程与线程

一、介绍 本文主要梳理下进程,线程,协程的概念、区别以及使用场景的选择。 二、进程 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代”。一切的程序只能串行发生。 早期的单进程操