Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二进制源码和补码的基础解释

二进制源码和补码的基础解释

作者头像
小明爱学习
发布于 2020-08-10 06:33:02
发布于 2020-08-10 06:33:02
1K00
代码可运行
举报
文章被收录于专栏:smh的技术文章smh的技术文章
运行总次数:0
代码可运行

二进制

我们知道,计算机最终处理的都是0和1的二进制的数据,二进制又分为有符号数和无符号数,今天就带你们详细了解一下。我会以代码为例子让各位更清晰的明白,所用语言为C#语言。

无符号数

所谓无符号数就是没有符号的数,数有正负之分,但是只有负数的时候才会有符号,所以无符号数就是正数。

无符号数不用考虑正负,所以数中的每个二进制数都是用来表示数值的。

下面请看代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UInt16 decimals = 2767;
string binary = Convert.ToString(decimals,2);
Response.Write("Data:<span>" + binary + "</span><br/>");
Response.Write("Length:"+binary.Length);

首先我定义一个了一个16位无符号整数的变量decimals,赋值为2767,然后转成二进制形式,并打印了出来,结果如下:

这里大家应该都看得懂,2767这个十进制转成二进制就是上述图片中的二进制数字。

有符号数

所谓有符号数就是有正负的数,可以是负数了,所以在二进制的数字中,我们就拿最高位的数字用来表示正负,0表示正,1表示负。

下面请看代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        Int16 decimals = 2767;
        string binary = Convert.ToString(decimals,2);
        Response.Write("Data:<span>" + binary + "</span><br/>");
        Response.Write("Length:"+binary.Length);

这跟上述的唯一区别就是这次我定义的是有符号的16位整数,然后我们接着来输出看看结果。

从表面上看是一样的,实质上是不一样的,第一个是无符号整数,输出的是源码,第二个我们有符号整数,输出的补码。但是由于正数的源码和补码是一样,所以我们看到的是一样的。

这里C#语言给我们省略了4个0,实际上完整的Data应该是:0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1。

最高位就是符号位为0,就是正数。

负数的情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Int16 decimals = -3;
string binary = Convert.ToString(decimals,2);
Response.Write("Data:<span>" + binary + "</span><br/>");
Response.Write("Length:"+binary.Length);

输出结果:

这里,输出的补码,源码转补码的步骤是:首先是求出3的源码是:1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

然后把这个源码全部取反,0变1,1变0,符号位不变,变成:1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0,然后在加1得到:1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1得到补码。

说到这里,那补码有什么用呢?

补码是在源码的基础上取反加1,那么想想,比如3-2,就可以改为3+(2的补码),这样就把减法变为了加法,在计算机中,加法比减法在计算机中效率高很多。

这里我们四位来模拟演示:

首先求出3的源码为:0011 然后求出2的补码为:1110

然后0011+1110等于0001,0001转为10进制就为1,这样就把减法转为了加法。

这里加法可能大家会求出10001,前面那个1是符号位的进位,需舍去

如无作者授权,请勿转载。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年08月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么计算机中的负数要用补码表示?
在前面的文章里,我们聊到了计算机的冯·诺依曼架构的 3 个基本原则。其中第 1 个原则是计算机中所有信息都是采用二进制格式的编码。也就是说,在计算机中程序的数据和指令,以及用户输入的所有数据,计算机都需要把它们转换为二进制的格式,才能进行识别和运算。
用户9995743
2022/12/22
3.2K0
为什么计算机中的负数要用补码表示?
二进制数的反码和补码
在大学的学习中,一开始自认为已经学会了反码与补码,但在看到多种表述之后,反而是越来越乱,疑惑越来越多,即使记住了之后又会混淆,今天又看到了一次,为了防止以后再次忘记,写这篇博客记录一下(记录过程依据《数字电子技术(第十版)》,中英文结合) 首先从最一般的意义上,分别说一下二进制的反码和补码:
梦飞
2022/06/23
4K0
二进制数的反码和补码
图解二进制
更新日志 2022-9-15 子时 于 杭州 目录结构调整 配图补全 封面更改 说明:以下均指8位二进制数形式 在了解原码之前,先熟悉几个名词.。 机器数 数字在计算机中的二进制表现形式。分正负。 图解 真值 有符号数转二进制之后,其原来对应的值位真值,带符号的二进制转为其他进制之后的值称为形式值。 图解 注:红色的数字1是十进制-3转二进制之后的符号位 原码 符号位+真值的绝对值,即是带符号的二进制数 举例: 十进制 二进制原码 +1(正一) 0000 0001 -1
堆栈哲学
2022/11/24
1.3K0
图解二进制
Python 笔记:二进制的补码
计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,”正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过是我们绝大多数人生来具有10个手指头这个解剖学事实的结果。尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚。”.为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制1.数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了。
用户8442333
2021/05/17
1.3K0
二进制中1的个数
有一个整数,想知道它的二进制表示中有多个1,你会怎么做?本文将带大家深入学习下二进制以及它的各种运算,一步步的研究出这个问题的解决方案,欢迎各位感兴趣的开发者阅读本文。
神奇的程序员
2022/04/10
8500
二进制中1的个数
基础野:细说有符号整数
Breif                                本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下。  本篇我们一起来探讨一下基础——有符号整数的表示方式和加减乘除运算。 Encode                                 有符号整数可表示正整数、0和负整数值。其二进制编码方式包含 符号位 和 真值域。   我们以8bit的存储空间为例,最左1bit为符号
^_^肥仔John
2018/01/18
1.9K0
反码补码和位运算
三者是计算机存储数据的不同形式,计算机用补码存储数据。而且计算机利用这三者可以用加法实现减法
晚上没宵夜
2020/04/24
6720
原码补码反码在线计算_补码的补码是原码
[-3]反=[10000011]反=11111100 原码 反码 负数的补码是将其原码除符号位之。
全栈程序员站长
2022/09/30
1.9K0
为什么补码是按位取反加一_补码为什么加1
首先,阅读这篇文章的你,肯定是一个在网上已经纠结了很久的读者,因为你查阅了所有你能查到的资料,然后他们都会很耐心的告诉你,补码:就是按位取反,然后加一。准确无误,毫无破绽。但是,你搜遍了所有俯拾即是而且准确无误的答案,却仍然选择来看这篇毫不起眼的文章,原因只有一个,只因为你还没有得到你想要的东西。
全栈程序员站长
2022/09/22
7551
【C语言】操作符详解1(含进制转换,原反补码)
    上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单⽬操作符,今天继续介绍⼀部分,操作符中有⼀些操作符和⼆进制有关系,我们先铺垫⼀下⼆进制的和进制转换的知识
TANGLONG
2024/10/15
2420
【C语言】操作符详解1(含进制转换,原反补码)
【码制】原码反码补码移码浮点数
学C语言的时候一定会用到printf("%d",a); 有的课程称%d为“占位符”,非常形象:%d替a占位,输出的时候a的值会替换%d的内容。 但也有课程称之为“转换规范”,官方称之为“format specifiers”格式说明符。 以我目前的文化水平,我更倾向于“转换规范”。 因为计算机中的数据都是以01的形式存储,你不知道这串01是什么意思。 以char类型的变量a为载体举个例子:
WuShF
2023/10/23
8660
【码制】原码反码补码移码浮点数
数字逻辑基础:原码、反码、补码
以3为例,+3对应的二进制数是00000011,-3对应的二进制数是10000011。
WuShF
2023/03/01
6890
数字逻辑基础:原码、反码、补码
深入理解计算机系统cp2:定点数的表示和运算
在深入理解计算机系统cp1:存储单位、数制、编码中解释了字符编码,我们知道了计算机是怎么把字符转化为二进制的;本文将解释数字编码,介绍计算机如何把数字转化为二进制,以及相关的运算问题。
Chor
2019/11/07
1.1K0
一文读懂原码、反码与补码
二进制和十进制一样,也是一种进位计数制,但是它的基数是 2。二进制表达式中 0 和 1 的位置不同,它所代表的数值也不同。例如,二进制数 0000 1010 表示十进制数 10。一个二进制数具有两个基本特点:两个不同的数字符号,即 0 和 1,逢二进一。
阿宝哥
2020/01/14
3K0
一文读懂原码、反码与补码
浅谈计算机中数值表示:原码、反码、补码与移码
计算机科学中,数字的表示方式至关重要,因为计算机内部只能识别处理二进制数据。为了在计算机中实现对整数的表示,提出了多种数值编码方式,其中最常用的是原码、反码、补码和移码。
一条晒干的咸鱼
2024/11/19
1.7K0
浅谈计算机中数值表示:原码、反码、补码与移码
数值问题
计算机里面关于数值的处理自有一套体系理论,与现实生活中我们所习惯使用的不太一样。如果对其不了解,在使用计算机的过程中便可能发生一些意想不到的错误。
rand_cs
2023/12/10
2690
原码 反码 补码
我们了解到计算机由控制器、运算器、存储器、输入和输出五个部分组成。其中,运算器中不包含减法器,倒不是说减法器实现不了,而是聪明的人发现了可以用加法器来实现减法操作,这样就不必再设计减法器了。比如,减法可以看成一个数加上另一个负数。这样的话,就需要引入符号位,即负号和正号。其实,原码、反码和补码的出现就是为了解决计算机中存储数字符号位的问题以及让计算机能够计算减法。
谛听
2023/10/14
3830
计算机负数补码_负数用补码表示如何理解
在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是00001001。 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11111001。 已知一个数的补码,求原码的操作分两种情况: (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取 反,然后再整个数加1。 例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负 数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。 在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模” 的概念: “模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范 围,即都存在一个“模”。例如: 时钟的计量范围是0~11,模=12。 表示n位的计算机计量范围是0~2(n)-1,模=2(n)。【注:n表示指数】 “模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的 余数。任何有模的计量器,均可化减法为加法运算。 例如: 假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法: 一种是倒拨4小时,即:10-4=6 另一种是顺拨8小时:10+8=12+6=6 在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。 对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特 性。共同的特点是两者相加等于模。 对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再 加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的 模为2(8)。 在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以 了。把补数用到计算机对数的处理上,就是补码。
全栈程序员站长
2022/11/15
2.8K0
整数、浮点数在计算机中的存储
  计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。要想学习编程,就必须了解二进制,它是计算机处理数据的基础。
mukekeheart
2019/09/29
1.9K0
整数、浮点数在计算机中的存储
二进制——减法「建议收藏」
有符号类型是利用其二进制的最高位来存储正负标志的,所以有符号类型的最大值的绝对值要小于无符号类型,就是因为有符号类型比无符号类型少了一位数据位,大小当然就少一半了,但是两种类型所表示的数值的个数是一样多的,因为从二进制角度来看,两种类型没有任何的区别。
全栈程序员站长
2022/09/28
1.7K0
相关推荐
为什么计算机中的负数要用补码表示?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验