精华内容
下载资源
问答
  • 二进制表示
    千次阅读
    2021-07-25 02:34:30

    原标题:计算机内部数据为什么用的是二进制表示?

    21a228e161aaaa4921c752e3e0c0555a.gif

    说起数制的表示,我们常用的是十进制,即用0-9这十个数值来组合来表达任意的自然数,那为什么计算机内部却用二进制来表示数据呢?

    计算机最基本的功能就是数值运算,它的实现是建立在数字电路基础之上,为了更简单的设计计算机,让计算机更易于数值运算,同时又根据数字电路的特点,所以就有了二进制,即用0和1的任意组合来表示任意自然数。数字1可以用数字电路中的高电平来表示,数字0可以用数字电路中的低电平来表示。

    数字电路中的基本电路单元是门电路,门电路的可以输出高低电平,每个门电路可以表示出一位,多个门电路组合可以表示出任意的多位数值。比如1用二进制表示为1,3用二进制表示就是11,15用二进制表示就是1111,这种表示方法虽然人类看起来有点费解,但是对计算机却很简单,他们的加减运算跟十进制一样,例如对于加法来说十进制是遇到十进一位,而二进制则遇到二进一。

    2d9ebe963a250e47a7dd2fdf8b337efa.png

    在计算机的设计过程中,可以用各种门电路来设计出加减法器,通过控制加减法器,可以让计算机自动给我们计算出结果。

    当然那有没有数值十进制的计算机吗?其实这个也可以设计,不过是超复杂的,最基本的数据表达单元就得能表达10个状态,而不像现在的2个状态就好,这样设计起来会很复杂,如果用不同的电压范围分别表示0-9,抗干扰性没有0-1的强,所以说暂时应该没有数值是十进制的计算机。返回搜狐,查看更多

    责任编辑:

    更多相关内容
  • 浮点数怎么用二进制表示

    千次阅读 2021-12-31 21:59:32
    浮点数怎么用二进制表示 对于浮点数在计算机中是怎么用二进制表示的,这个知识点让我学了很久,很多资料讲的特别抽象难懂,所以今天我想用自己的方式讲一讲。 学过 《计算机组成原理》 或者类似 《计算机系统》 这些...

    浮点数怎么用二进制表示

    对于浮点数在计算机中是怎么用二进制表示的,这个知识点让我学了很久,很多资料讲的特别抽象难懂,所以今天我想用自己的方式讲一讲。
    学过 《计算机组成原理》 或者类似 《计算机系统》 这些课程的小伙伴们应该都知道,浮点数在计算机中的存储方式遵循IEEE 754 浮点数计数标准,可以表示为:
    在这里插入图片描述
    图片采用尾数 + 阶码的编码方式,更通俗一点说,就是类似于数学课本上所学的科学计数法表示方式:有效数字 + 指数位!
    因此,只要给出:符号(S)、阶码部分(E)、尾数部分(M) 这三个维度的信息,一个浮点数的表示就完全确定下来了,所以float和double这两种类型的浮点数在计算机中的存储结构
    在这里插入图片描述
    在这里插入图片描述
    1.符号部分(S)
    0-正 1-负

    2、阶码部分(E)(指数部分):

    • 对于float型浮点数,指数部分8位,考虑可正可负,因此可以表示的指数范围为-127 ~ 128
    • 对于double型浮点数,指数部分11位,考虑可正可负,因此可以表示的指数范围为-1023 ~ 1024

    3、尾数部分(M):
    浮点数的精度就是由尾数部分决定的

    • 对于float型浮点数,尾数部分23位,换算成十进制就是 2^23=8388608,所以十进制精度只有6 ~ 7位;
    • 对于double型浮点数,尾数部分52位,换算成十进制就是 2^52 = 4503599627370496,所以十进制精度只有15 ~ 16位

    所以,浮点数交给计算机存储的时候,可能会有精度丢失问题!!!因此使用时需要格外小心,如果真因为这一块出了bug,定位问题还是非常艰难的,所以预防工作要做好。

    我们先来举个例子详细说明一下浮点数怎么转换成二进制数
    比如:把十进制小数0.875转换成二进制,具体怎么操作?
    可以分几大步走:
    第一:以小数为界限划分成整数部分和小数部分
    第二:我们开始来整数部分的转换,这里的整数是为十进制数,转换成二进制数的方式是除以二取余数,这里的整数部分为零,那转换成二进制数也为零。
    第三:小数部分的转换,小数部分的转换的方式是乘二取整数,如下图
    在这里插入图片描述
    第四:将结果合并,就可以得到这个结果为0.111

    所以该结果按照上一节所述的尾数 + 阶码的计算机计数方式,则可以表示为:
    在这里插入图片描述
    符号位:0
    阶码(E)部分:若以float为例,应为 127 +(-1)= 126,因此二进制表示为:01111110
    ***尾数部分(M)***:若以float为例,应为23位,因此尾部补齐后为11000000000000000000000。因此最终的总结果为(以32位精度float表示):00111111011000000000000000000000

    展开全文
  • 数据的二进制表示

    千次阅读 2020-02-05 17:07:43
    数据的二进制表示 文章目录数据的二进制表示基础定义二进制 基础定义 位: IC 电子元件有不同种形状,但是其内部的组成单元称为一个个的引脚。只有直流电压0V 或 5V 两个状态。与 “0” 与“1”的表达不谋而合 字节...

    文章目录

    基础定义

    : IC 电子元件有不同种形状,但是其内部的组成单元称为一个个的引脚。只有直流电压0V 或 5V 两个状态。与 “0” 与“1”的表达不谋而合
    在这里插入图片描述

    字节:8 位二进制数被称为一个 字节

    为什么拟定 8 位为一个字节?
    因为 8 位能够涵盖基本的字符编码(英文 26 个字母大小写 + 基本符号位等)

    实例:

     一个英文字母-----占一字节
    
    一个中文字-------占二个字节
    
    一个整数---------占二个字节
    
    一个实数---------占四个字节
    

    图:
    在这里插入图片描述

    二进制

    位权:进制数值中某个位的权重值
    例如:
    十进制数 39 的各个数位的数值,并不只是简单的 3 和 9
    3 表示的是3×10 = 30,9 表示的是 9×1 = 9
    这里和各个数位的数值相乘的 10 和 1,就是位权

    基数:数值的表现方法,进位计数制中各数位上可能有的数值的个数。十进制数的基数是 10,二进制数的基数是 2

    二进制转十进制的理解
    核心:基数 x 位权

    十进制数:
    如 39 这个十进制数,表示的就是 30+9

    二进制数:
    00100111 用十进制数表示的话是 39,因为(0×128)+(0×64)+(1×32)+(0×16) +(0×8)+(1×4)+(1×2)+(1×1)= 39

    补数:将二进制数的值取反后加 1 的结果

    为什么使用补数后就能正确地表示负数了呢?
    实际上是验证:补数与原来的数相加是否为 0
    “将二进制数的值取反后加 1 的结果,和原来的值相加,结果为 0”这一法则
    例子:
    00000001+11111111
    图:
    在这里插入图片描述

    减法运算
    计算机在做减法运算时,实际上内部是在做加法运算。

    进位法则: 对各个进制的数都满足,满基数,向(当前位权+1)进1
    备注:楼主表示纠结这个概念了半天| :( |

    符号位
    二进制数中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位称为符号位。符号位是 0 时表示正数 ,符号位是1 时表示负数。
    错误事例
    “1 的二进制数是 00000001,因此-1 就是 10000001”
    正确事例
    “1 的二进制数是 00000001,因此-1 就是 11111111”

    符号位的应用
    有的可以处理负数,有的则不能处理。例如,C 语言的数据类型中,既有不能处理负数的 unsigned short 类型,也有能处理负数的 short 类型。这两种类型,都是 2 字节(= 16 位)的变量,都能表示 2 的 16 次幂 = 65536 种值,这一点是相同的。
    不过,值的范围有所不同,short 类型是- 32768~32767,unsigned short 类型是 0~65535。此外,short 类型和 unsigned short 类型的另一个 不 同 点 在于,short 类 型 是 将 最 高 位 为 1 的 数 值 看 作 补 数, 而unsigned short 类型则是 32768 以上的值。

    为什么总说最高位为 1 时是负数,为 0 时是正数?那么十进制的255用二进制表示就是1111-1111,可是二进制最高位是1的时候是负数,这个应该怎么理解?

    整数分为“有符号整数”和“无符号整数”,以8位的二进制而言:
    如果按无符号整数来用,那么最小值0(二进制0000-0000),最大值是255(1111-1111),总数是256个
    而如果作为有符号整数来用,则最小值为-128(二进制1000-0000),最大值为127(0111-1111),总数也还是256个
    题目中的 " 1111-1111 " 在 “有符号整数”中就不能够表示为 255 了,所以在依据最高位来判断正负数时,应该视具体情况而定

    逻辑右移与算数右移的区别
    算数右移有移位后在最高位补 0 和补 1 两种情况(视数值为正数或者负数)
    当二进制数的值表示图形模式而非数值时,移位后需要在最高位补 0。类似于霓虹灯往右滚动的效果。这就称为 逻辑右移
    图:
    在这里插入图片描述
    符号扩充
    符号扩充就是指在保持值不变的前提下将其转换成 16 位和 32 位的二进制数
    不管是正数还是用补数表示的负数,都只需用符号位的值(0 或者 1)填充高位即可
    图:
    在这里插入图片描述
    逻辑运算
    包括逻辑非(NOT 运算)、逻辑与(AND 运 算)、逻辑或(OR 运算)和逻辑异或(XOR 运算 A)四种

    逻辑异或 指的是排斥相同数值的运算。“两个数值不同”
    图:
    在这里插入图片描述

    展开全文
  • 理解浮点数的二进制表示

    千次阅读 2020-05-30 23:14:14
    浮点数的二进制表示 符号位、尾数和指数(以64位浮点数为例) 0、规约数和非规约数 无穷大和空值NaN 二进制的科学计数法 浮点数在电脑中用二进制储存,约定以二进制的科学计数法来进行表示一个浮点数,类比十...

    目录

     

    二进制的科学计数法

    浮点数的二进制表示

    符号位、尾数和指数(以64位浮点数为例)

    0、规约数和非规约数

    无穷大和空值NaN


    二进制的科学计数法

           浮点数在电脑中用二进制储存,约定以二进制的科学计数法来进行表示一个浮点数,类比十进制的科学计数法,很容易知道,二进制的科学计数法的首位数字一定为1,然后通过乘以相应的底数为2的指数来得到二进制数,如下所示。

           下面等号左边是原二进制数,右边就是其二进制的科学计数表示。和十进制一样,二进制的科学计数表示之后,也具有有效数字(尾数)、底数和指数,只是二进制的有效数字由0和1组成,底数为2。

    1110011=1.110011\cdot 2^{6}

    浮点数的二进制表示

           所以,浮点数的二进制表示包括符号、尾数和指数。比如对于32位浮点数来说,1位符号位、23为尾数位和8位指数位;对于64位浮点数来说,1位符号位、52位尾数位和11位指数位。尾数以二进制的科学计数法约定表示,因为对于所有约定的规约数来说,首位都是1,所以首位的1会被默认省去,所以对于64位浮点数,其有效精度可以达到二进制的53位;指数的底数为2,由于为了表示小数,故指数也有正负,为了表示负数,所以指数通过移码的方式进行转化。

           以64位浮点数为例,如下所示。从0-63共有64个bit,其中首位用来表示符号,0为正,1为负。接下来11位bit用来储存指数,剩下的52位用来储存尾数。

    符号位、尾数和指数(以64位浮点数为例)

           符号位很简单,就是约定0表示正,1表示负。对于尾数,其有52位bit,但是根据二进制的科学计数法,首位都为1,因此我们可以省略掉这个1,这样子52位都可以用来储存尾数的小数部分,因此实际上52位尾数小数的有效尾数有共有53位,只是首位的1被省略了。对于指数,有11bit,但是为了表示负数,采用二进制指数值-偏移量的计算方式得到计算中的指数值;比如64位的指数偏移量约定为1023,11bit可以表示的值的范围为0~2047的整数,但是这里真正被用作指数计算的只有1~2046,0和2047这两个数字被剔除,以用来表示特殊值,这个文章后面再说明;因此,1~2016减去偏移量1023后,真正的指数取值范围为-1022~1023。所以64位浮点数的具体的二进制表示方式如下。

           

    0、规约数和非规约数

           So far so good! 问题来了,怎么表示0?由于上述定义中,尾数始终是大于1的,所以无论如何也无法得到0,因此0这个需要特殊定义。根据上述的定义,即指数范围在1~2046之间,有效数字首位为1的浮点数,叫做规约数(normal numbers)。同时还注意到,上述在讲指数的时候,有两个值是没有用到的,即0和2047,对应着指数部分11个bit分别全部为0和全部为1的情形。所以为了表示0,约定当指数部分全部为0,且尾数小数部分也全为0的时候,表示0;要注意的是,虽然本文这里说的是尾数的小数部分全为0,但是实际上这时,首位隐藏的1变成了0。

           接下来的问题是,如果指数部分全为0,但是尾数的小数部分不全为0,这时该表示什么?因为对于规约数的定义,我们研究指数部分的值在1~2046之间,而指数为0时,就超出了规约数定义的范围了,因此,当指数为0,但是尾数小数部分不全为0时,我们定义这样的数为非规约数(denormal numbers or subnormal numers)。要注意的是,非规约数的指数一定是为0的,但是这时偏移量变成了1022;即当指数为0时,那么不仅尾数首位隐藏值从1变成0,而且约定偏移量这时为1022,即移码后的指数依然保持-1022不变(注意不是-1023),以该移码后的指数(即-1022)去计算非规约数的大小。

    无穷大和空值NaN

           至此,我们还有一个数没有说明,那就是指数的2047,即指数全为1时的情形。我们约定,当指数全为1,且尾数小数部分全为0时,表示无穷大,然后根据符号的不同,有正无穷大和负无穷大。但是当指数全为1,但是尾数的小数部分不全为0时,表示什么呢?这样的数字实际上是未定义的,所以约定其为NaN(Not a Number),所以可知,实际上NaN的情形是很多的,在对NaN进行比较时,系统约定其是不相等的,因为我们不能通过等号来判断NaN值,由于NaN实际上也有有二进制表示的,所以其不是一个空对象,也不能用是否为空对象来判断;这也是为什么pandas中判断一个值是否为NaN需要使用规定的函数,不能直接使用等号判断和空对象判断的原因,具体的pandas中的判断方式可以看这篇文章

    展开全文
  • 原码、反码、补码二进制表示

    千次阅读 2021-10-18 07:13:21
    原码,反码,补码,都是计算机用二进制表示数据的,计算机表示数据是由数据长度和符号位表示的,首位表示符号位,0表示正数,1表示负数,剩下的数据表示所要表示的数据。 什么是数据长度? 就是我们说的位数,...
  • 字节、位与二进制表示

    万次阅读 2021-02-03 14:34:00
    每个bit位非0即1,即二进制表达中的0或1,0001中每个“0”和“1”即为位。 JAVA常见基本类型: byte 1字节 short 2字节 int 4字节 long 8字节 char 2字节(C语言中是1字节)可以存储一个汉字 float 4字节 double 8...
  • 浮点数的二进制表示方法

    万次阅读 2018-09-04 11:09:17
    浮点数的二进制表示 Double型,64位 例一: 已知:double类型38414.4,求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。 由最高到最低位分别是第63、62、61、……、0位: 最高位63位是符号位,...
  • 有符号的二进制表示及转换

    千次阅读 2022-01-15 10:49:24
    有符号的二进制表示: 最左边的看作符号位,为1表示负数,为0表示非负数 (即 有符号的二进制表示较无符号的少了1/2(这里指非负数和负数要各占一半),这就能解释为何 int型取值范围为:-2^31 ~ 2^31-1,而...
  • C++ - 求一个正整数的二进制表示中1的个数

    万次阅读 多人点赞 2019-02-20 16:28:12
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /* * Created by Chimomo */ #include &... int n = 0...
  • (易懂)负数的二进制表示方法

    千次阅读 2020-09-02 09:51:13
    一:表示法: 1、正数5的表示法 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 ...一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。 比如 00000
  • 负数的二进制表示方法

    千次阅读 2017-07-14 10:17:25
    负数的二进制表示方法 假设有一个 int 类型的数,值为3,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000011 因为int类型的数占用4字节(32位),所以前面填了一堆0。 在计算机中,负数以其...
  • 负数的二进制表示

    万次阅读 多人点赞 2018-11-17 21:57:34
    5转换成制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 -5在计算机中如何表示? 在计算机中, 正数是直接用原码表示的,如单字节5,在计算机中就表示为:0000 0101。 负数以其正值的补码...
  • 学过计算机组成原理的小伙伴们都知道,在计算机中,负数的二进制是用2的补码表示负数的。 那么,为什么要用这种方式表示负数?有什么好处? 我们一起来看下吧。 为什么用这种方式表示负数 计算机的内存通常都是由8位...
  • 题目:程序读入一个整数 n,假设 n 不会大于 1000,请输出 1 到 n 每个数字的二进制表示 1 的个数。
  • 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” ...
  • C++中负数的二进制表示

    千次阅读 2021-02-23 11:32:51
    比如字符型-5,它的二进制表示如下, 第1步:先写出整型5的二进制表示【0000,0101】 第2步:取反加1就是整型-5的二进制表示【1111,1011】
  • C++ 负数的二进制表示

    千次阅读 2020-01-17 20:48:58
    5转换成制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 -5在计算机中如何表示? 在计算机中, 正数是直接用原码表示的,如单字节5,在计算机中就表示为:0000 0101。 负数以其正值的补码形式...
  • 有符号数的表示法、加减法、补码 摘要:本文将会说明有符号数的表示方法,有符号数正负数之间的跳变,有符号负数的加减法,为什么采用补码等方面进行分析。 我是学过计算机原理的,也有有符号数和无符号数的概念,...
  • java 负数的二进制表示

    千次阅读 2019-06-26 20:18:04
    JAVA 基础系列 计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负” ...第二步:将上面的二进制以反码表...
  • 浮点数的二进制表示(IEEE 754标准)

    千次阅读 多人点赞 2019-02-28 11:59:14
    浮点数是我们在程序里常用的数据类型,它在内存中到底是怎么样的形式存在,是我了解之前是觉得好神奇,以此记录,作为学习笔记。现代计算机中,一般都以IEEE ...根据这个标准,我们来尝试把一个十进制的浮点数转换...
  • float的二进制表示方式

    千次阅读 2018-11-07 20:33:15
    一.float 的二进制表示方式:
  • c++输出数据的二进制表示形式

    千次阅读 2020-05-22 12:21:12
    今天做位运算的题目,想要通过查看二进制表示形式来debug和分析 特此记录一下 c++ STL中模板类bitset的简单实用 #Include <bitset> 将整形int转化为二进制bitset() bitset(x)//将x转化为32位二进制数 测试代码 #...
  • 十进制负数的二进制表示

    千次阅读 2018-04-04 11:22:36
    ...十进制转正整数转二进制应该都会,用C语言代码简单表示算法: #include&amp;amp;lt;stdio.h&amp;amp;gt; int main() { int dec=65535; /*positive decimalism number to binary ...
  • 浮点数的二进制表示

    千次阅读 2018-07-28 17:06:36
    这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&...
  • 有符号数的二进制表示方式

    万次阅读 2019-04-21 14:51:36
    以4字节的整型为例,4byte=32bit: 32位数一共可以表示个数,对于有符号... 二进制源码 二进制反码 二进制补码 65535 01111111 11111111 11111111 11111111 01111111 11111111 11111111 11111111 ...
  • 浮点数二进制表示

    千次阅读 2018-07-29 20:59:42
    上面这条命令,声明了一个整数变量,类型为int,值为9(二进制写法为1001)。普通的32位计算机,用4个字节表示int变量,所以9就被保存为00000000 00000000 00000000 00001001,写成16进制就是0x00000009。 那么,...
  • 整数在计算机内部的表达 众所周知 在计算机的内部 ...事实上 在计算机中 二进制使用的是补码的方式来表示负数 补码 即为二进制中的11111111(请注意 并不是作为纯二进制 而是补码 若是纯二进制那么就是255了) 由于十进
  • 题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示 收获: 1.由负数的补码求他的绝对值补码:负二进制数的绝对值,只要各位(包括符号位)取反,再加1,就得到其绝对值。 2.负数正码取反...
  • 浮点数是我们在程序里常用的数据类型,它在内存中到底是怎么样的形式存在,是我了解之前是觉得好神奇,以此记录,作为学习笔记。 现代计算机中,一般都以IEEE 754标准存储...根据这个标准,我们来尝试把一个十进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,088,242
精华内容 435,296
关键字:

二进制表示

友情链接: MiniTool v9.175.zip