精华内容
下载资源
问答
  • 二进制负数转正数
    千次阅读
    2021-01-22 14:24:26

    先来举2个栗子(正数转负数的概览过程):

    将1转换成二进制数据为  
             0000 0000 0000 0000 0000 0000 0000 0001
    学过计算机的,都知道最高位代表符号位,0为正,1为负,所以得到的二进制为  
             1000 0000 0000 0000 0000 0000 0000 0001
    但计算机还会进行反码和补码,有兴趣的可以自己查,我只说过程,除了最高位,其他都取反,即0变1,1变0
             1111 1111 1111 1111 1111 1111 1111 1110
    最后,还要对以上得到的结果 +1
             1111 1111 1111 1111 1111 1111 1111 1111
    总结过程:
           a.最高位改成1
           b.除了最高位,其他位取反
           c.结果+1
           d.得到的结果就是对应的负值
    负值转正值,没啥说的,把以上过程倒过来~

     

    一、表示法:

    1、正数5的表示法
    假设有一个 int 类型的数5,它在计算机中表示为:00000000 00000000 00000000 00000101;(5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0)
    2、负数-5的表示法
    在计算机中,负数以原码的补码形式表达

    二、概念:

    1、原码:

    一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码,比如:
    00000000 00000000 00000000 00000101 是 5的 原码。
    10000000 00000000 00000000 00000101 是 -5的 原码。

    2、反码

    正数的反码与原码相同,负数的反码为:对该数的原码除符号位外各位取反[每一位取反(除符号位)]。
    取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)比如:
    正数 00000000 00000000 00000000 00000101  的反码还是 00000000 00000000 00000000 00000101
    负数 10000000 00000000 00000000 00000101  的反码则是 11111111 11111111 11111111 11111010。
    反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码

    3、补码

    正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1;比如:
    10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010;
    补码:11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
    备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减一,再取反
               2、补码却规定0没有正负之分
    因此,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB

    再对补码举个栗子,我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:
    1、先取-1的原码:10000000 00000000 00000000 00000001
    2、得反码:     11111111 11111111 11111111 11111110(除符号位按位取反)
    3、得补码:     11111111 11111111 11111111 11111111
    可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

    三、知识点总结:

    正数的反码和补码都与原码相同。
    负数的反码为对该数的原码除符号位外各位取反。
    负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
    源码:优点在于换算简单 缺点在于两个零 加减法需要独立运算
    反码:有点在于表示清晰 缺点在于两个零 加减法同样需要独立运算
    补码:优点在于一个零 范围大  减法可以转为加法 缺点在于理解困难

    下面是书上原文
    原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。
    反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
    补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
    正零和负零的补码相同,[+0]补=[-0]补=0000 0000B

    更多相关内容
  • 十进制与二进制转换(负数+正数

    千次阅读 2019-07-14 14:42:15
    一、十进制正数二进制转换 1、9利用“除2取余法,余数逆序排列”,得到原码。 2、则9的二进制数为 0000 1001。 二、十进制负数二进制转换 1、先将9利用“除2取余法,余数逆序排列”,得到原码。 2、将...

    一、十进制正数的二进制转换

    1、9利用“除2取余法,余数逆序排列”,得到原码。
    在这里插入图片描述

    2、则9的二进制数为 0000 1001

    二、十进制负数的二进制转换

    1、先将9利用“除2取余法,余数逆序排列”,得到原码。
    在这里插入图片描述
    2、将上一步骤得到的原码取反(1取0,0取1,数个数字除外,一直为1),得到反码。对应反码为:11110110。
    3、在反码的基础上,加1得到补码。
    对应的补码为:11110111。
    在这里插入图片描述
    4、十进制负数转二进制方法总结如下:

    1. 除2取余,逆序排列 。
    2. 01互换,原码取反码 。
    3. 反码+1,得补码。

    三、逆向操作将二进制的负数转为十进制。

    1、将二进制数减1,得到:11101100。
    2、将减1后的代码取反操作,得到:00010011。
    3、将取反后的代码换算成十进制,得到19。‘
    4、在计算结果19的基础上要加上-号,结果为-19.
    在这里插入图片描述
    总结:
    1、二进制转十进制跟十进制转二进制互为逆操作;
    2、二进制由于只有0和1,没有符号,其实首位即代表其符号;

    展开全文
  • 二进制整数都是以补码的形式出现的 正数的原码、反码、补码都相同 负数的反码就是正数的原码先把最高位变为1然后其余的位取反 负数的补码就是该负数的反码加1。

    1、转换规则

    二进制整数都是以补码的形式出现的
    正数的原码、反码、补码都相同
    负数的反码就是正数的原码先把最高位变为1然后其余的位取反
    负数的补码就是该负数的反码加1。

    2、二进制的移位规则

    <<和>>

    二进制数,在向右移1位近似表示除以2,但是十进制的奇数转化为二进制数后,在向右移时,最右边的1将被直接抹去,说明向右移对于奇数并非完全近似于除以2。
    左移 <<,和右移>> 两种运算中,符号位均参与移动,除了负数右移,高位补1之外,其他情况均在空位处补0。
    在这里插入图片描述在左移运算中,由于符号位均参与向左移动,如上图,最左位可能是1或者是0,正数向左移动的结果可能是正,也可能是负;负数向左移动的结果同样可能是正,也可能是负。

    >>>>无符号右移

    注意不存在<<<无符号向左移动的运算方式!
    对于三个大于号的>>>无符号向右移动时,正负数高位均补0,造成的结果就是:
    正数不断向右移动的最小值是0
    负数不断向右移动的最小值是1
    无符号意即藐视符号位,符号位失去特权必须像其他平常的数字位一起向右移动,高位直接补0,根本不关心是正数还是负数。此运算常用在高位转低位的场景中。
    在这里插入图片描述为何负数不断地无符号向右移动的最小值是1呢?在实际编程中,位移运算仅作
    用于整型(32位)和长整型(64位)数上,假如在整型数上移动的位数是32位,无论是否带符号位以及移动方向,均为本身。因为移动的位数是一个mod32的结果,
    即35>>1与35>>33是一样的结果。如果是长整型,mod64,即35<<1与35<<65的结果是一样的。负数在无符号往右移动63位时,除最右边为1 外,左边均为0,达到最小值1,如果>>>64,则为其原数值本身。

    展开全文
  • 但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合。而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数。如果想要弄懂这...

    搜索热词

    程序猿们或许对二进制都不陌生,二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合。而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数。如果想要弄懂这个,我们需要先了解什么是二进制原码。原码是什么

    原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

    简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011

    原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001 + 10000001 = 10000010,换算成十进制为-2。显然出错了。

    80e340f2ccd562bdc17ba76234504e53.png

    二进制原码、补码和反码十进制如何转换成二进制

    我们如何把十进制的-3,转换成二进制表示呢?首先我们将 -3 的绝对值 +3 转换成二进制,假设是为int类型(32位)的,那么二进制表示为:0000 0000 0000 0000 0000 0000 0000 0011

    负数转换成二进制分为3步:

    1、 首先将负数转换为对应的原码

    -3 的原码为(也就是+3转换成二进制后的字符串):0000 0000 0000 0000 0000 0000 0000 0011

    2、 再将原码的每一位做取反操作得到反码。

    取反操作:0变为1 、 1变为0;取反后的结果即为:1111 1111 1111 1111 1111 1111 1111 1100

    3、 将反码+1得到补码1111 1111 1111 1111 1111 1111 1111 1101

    现在用Windows自带的计算器来验证一下,Win+R 输入calc,将计算器改为程序员,选择双字(4字节,32位)

    f1a558e2dd5b921f6186e9e24e66f604.png

    打开Windows自带的计算器科学计算功能

    在计算器中选择十进制,之后输入 -3 :

    94309282dd189f90c238547fb325f32e.png

    Windows自带的计算器科学计算十进制下输入-3

    再点击二进制转换,将十进制下的-3转换成二进制:

    9dee7bd05384099d80f2a3865d91d699.png

    转换十进制-3为二进制二进制转十进制负数问题

    正常情况下,转换二进制到十进制都是没有任何问题的。而在类似 Javascript / PHP 等整数类型中,一般 int /integer 都有位数限制,一般都是32位长度。也就预示着,这些语言中,整数是有最大值的,而32位最大整数极限为:2147483647,也就是二进制:01111111111111111111111111111111

    那么就很容易理解,32位二进制,第一位数为0的时候,就表示这个是一个正数,而如果是1,那么就表示这个是负数。

    32位二进制 11111111111111111111111111111001 十进制值是什么?11111111111111111111111111111001

    如上,二进制长度为32位,也就是这个整数是一个负数,先取反,得到反码:00000000000000000000000000000110

    反码+1,得到:00000000000000000000000000000111

    转换成十进制:7

    由于是负数,所以加个负号,转换成 -7

    趣味:32位二进制 1111111111111111111111111111001 十进制值是什么?

    这个是个比较有趣的,千万不要误导为上面这是一个负数,其实这个是个整数,因为这里只有31位,需要在前面加0,补足32位,变成:01111111111111111111111111111001十进制负数转八进制、十六进制

    负数转换成八进制、十六进制,只需在补码(二进制)的基础上,3位合成一位计算,或者4位合成一位计算

    -3的转换成二进制为:1111 1111 1111 1111 1111 1111 1111 1101

    八进制则将-3的二进制从右至左每3位为一个单元,不够三位用0补 即:011 111 111 111 111 111 111 111 111 111 101

    计算每一个单元,结果为:37777777775

    十六进制则将-3的二进制从右至左每4位合并为一个单元,即:1111 1111 1111 1111 1111 1111 1111 1101

    计算后为: FFFFFFFD

    9f31af35d4811862847d76e1a5ddef72.png

    转换十进制-3为八进制和十六进制

    总结

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:

    编程之家官方1群

    编程之家官方2群

    编程之家官方3群

    编程之家官方4群

    展开全文
  • 进制负数转二进制的方法步骤

    万次阅读 多人点赞 2018-12-29 18:13:25
    步骤一: 使用该负数的绝对值(负数的绝对值为正数二进制位 步骤二:二进制位按位取反 步骤三:取反后的二进制位+1 实例:-11 步骤一:正数11的二进制位为 00001011 步骤二:按位取反后的二进制位为 ...
  • 二进制正数负数说明

    千次阅读 2021-08-12 09:37:35
    我们已经知道计算机中,所有数据最终都是使用二进制数表达。 1、java8种基本数据类型占用字节: 表示范围公式:(-2的n-1次方) 至 (2的n-1次方 - 1); 因为第一位用于当做符号位,第1个bit表示符号,0表示正数,1...
  • 正数转负数二进制过程

    千次阅读 2020-03-19 15:35:02
    //转换成二进制数据为 0000 0000 0000 0000 0000 0000 0000 0001 //学过计算机的,都知道最高位代表符号位,0为正,1为负 //所以得到的二进制为 1000 0000 0000 0000 0000 0000 0000 0001 //但计算机还会进行反...
  • 前言:转换原则16进制[A-F]与10进制、2进制转义表一:2进制16进制二: 2进制中的负数如何转换成16进制1:先写成正数二进制2. 取反3.加一4.按照每四位合成一位转换成16进制三、16进制10进制1.先转二进制,一位...
  • 1、十进制负数转二进制假设有一个int类型的数,值为5,那么,我们知道它在计算机中表示为:(因为java中int是4个字节,所以高位需要补0,占够32位)00000000000000000000000000000101现在想知道,-5在计算机中如何表示...
  • 进制负数转二进制

    千次阅读 2019-01-25 14:23:47
    1、十进制负数转二进制 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: (因为java中int 是4个字节,所以高位需要补0,占够32位) 00000000 00000000 00000000 00000101 现在想知道,-5在...
  • 展开全部可以使符号位能与有效值部分一起参加运算32313133353236313431303231363533e58685e5aeb931333431373934,从而简化运算规则。...得到补码,使负数成为可加的正数。因此,负数的补码=模块...
  • public class Count1Number { public static String turn(int number) { StringBuffer sb = new StringBuffer(); if (number > 0) { while (number != 0) { if (number > 0) { ...
  • 负数的原码:负数的绝对值的二进制的最高位变为1。 负数的反码:负数的原码的最高位不变,其余取反。 负数的补码:负数的反码+1。 例: 1.正数 9 (0000 1001 = 23+20=9) 原码:0000 1001 反码:0000 1001 ...
  • 负数二进制转换方法

    千次阅读 2021-05-22 00:58:05
    进制负数转二进制假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: (因为java中int 是4个字节,所以高位需要补0,占够32位)00000000 00000000 00000000 00000101现在想知道,-5在计算机中如何...
  • 正数负数二进制表示

    千次阅读 2021-02-28 12:20:13
    其中x为一任意int型正整数,左式表示取x的相反数后的二进制形式,右式表示先将x的二进制按位取反后再加一得到的二进制形式。左右两个二进制相同"假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为...
  • Python基础入门之二进制负数

    千次阅读 2021-12-12 21:29:50
    刚刚介绍了位运算符,里面涉及到了二进制的运算,出现了a = 60,~a = 1100 0011 = -61的计算,所以这里记录一下二进制负数表示和计算。 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示...
  • java 负数十进制整数转二进制
  • 负数二进制

    千次阅读 2019-05-14 18:16:47
    ** 八位二进制数能表示数的范围...如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0代表正数,1代表负数,后面7位为数值域,这就是原码定义。这样在现实生活中完全没有问题,但在计算机中就出现...
  • 今天在看C语言位操作时遇见忘记的地方,向右移位时左边的二进制位补0或补1(正数补0,负数补1),在转换负数时有些看不懂负数的二进制,于是复习了负数转二进制的方法。 1、十进制负数转为二进制二进制总负数以...
  • 进制负数转换成二进制数的方法

    千次阅读 2017-07-24 16:35:44
    负数转换为二进制,就是将其相反数(正数)的补码的每一位变反(1变0,0变1)最后将变完了的数值加1,就完成了负数的补码运算。这样就变成了二进制。 举个例子: 将-1变成二进制。 ①首先确定二进制的位数,...
  • 文章目录1 十进制数转为二进制1.1 正数二进制1.2 负数二进制2 正负数与原码、反码、补码2.1 原码2.2 反码2.3 补码2.4 总结3 转换代码3.1 五种位操作简介3.2 十进制转二进制代码 1 十进制数转为二进制 先放出结论...
  • 25的二进制为11001,然后这里用8位二进制,所以我们在11001前面加上两个0,变成0011001,最后再加上符号位(正数为0,负数为1),因此为10011001 然后再对这个二进制数字进行取反加一的操作,注意,这里取反的时候不...
  • 负数二进制和十进制之间的转换

    千次阅读 2020-12-10 14:26:40
    进制负数转换为二进制的方法为: 1、将十进制转换为二进制数。 2、对该二进制数求反。 3、再将该二进制数加1. 总之就是将十进制数转换为二进制数求补码即为结果。比如: -32 第一步:32(10)=00100000(2) 第二...
  • 负数转换二进制

    千次阅读 2021-01-30 22:13:17
    负数转换二进制 对于负数转二进制,我们把它分三步: (举例 ‘ -9 ’ ) **(1) **先把正数二进制表示出来。1001 **(2)**取反。0110 **(3)**在取反的基础 +1。0111 所以 ‘-9’ 的二进制是 :0111。 ...
  • 十六进制转换成二进制,处理负数二进制最高位是1表示负数,0表示正数。源代码,已测试,
  • 对于负数转十六进制,matlab没有相关的函数可以直接转换。 原理 一个是在计算机中表达,一个是科学计数方式表达。 714 原码: 0000 0010 1100 1010 02CA -714的原码: 1000 0010 1100 1010 负数
  • 原码就是表示为数的二进制的形式,负数的原码是其正值的二进制最高位制1 正数的反码与原码相等 正数的补码与原码相等

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,637
精华内容 33,054
关键字:

二进制负数转正数