将负数转换为二进制

转载 2015年11月21日 19:42:55

我们已经知道计算机中,所有数据最终都是使用二进制数表达。

我们也已经学会如何将一个10进制数如何转换为二进制数。

不过,我们仍然没有学习一个负数如何用二进制表达。

 

比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

现在想知道,-5在计算机中如何表示?

 

在计算机中,负数以其正值的补码形式表达。

什么叫补码呢?这得从原码,反码说起。

 

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

 

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

反码是相互的,所以也可称:

11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

 

补码:反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011


所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。


再举一例,我们来看整数-1在计算机中如何表示。

假设这也是一个int类型,那么:


1、先取1的原码:00000000 00000000 00000000 00000001

2、得反码:     11111111 11111111 11111111 11111110

3、得补码:     11111111 11111111 11111111 11111111


可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

将负数转换为二进制

我们已经知道计算机中,所有数据最终都是使用二进制数表达。我们也已经学会如何将一个10进制数如何转换为二进制数。不过,我们仍然没有学习一个负数如何用二进制表达。 比如,假设有一 int 类型的数,值为5...
  • onewalkingman
  • onewalkingman
  • 2009年01月10日 14:42
  • 26798

Java 负数转换成二进制

对于十进制负整数N,求其负二进制表示。例如 1*1+1*-2+1*4+0*-8+1*16+1*-32=-13,所以10进制的-13 = 负二进制的110111 public static void ...
  • Anbernet
  • Anbernet
  • 2016年07月01日 18:11
  • 171

负数的二进制如何转化为十进制

-5 如何用二进制表示                取反加1      5  ----   0000 0101           取反                   1111 101...
  • shihengli2010
  • shihengli2010
  • 2016年08月22日 15:55
  • 9417

将负数转换为二进制

我们已经知道计算机中,所有数据最终都是使用二进制数表达。我们也已经学会如何将一个10进制数如何转换为二进制数。不过,我们仍然没有学习一个负数如何用二进制表达。比如,假设有一 int 类型的数,值为5,...
  • shanghui815
  • shanghui815
  • 2010年09月15日 11:45
  • 1230

十进制的负数转化成二进制,八进制,十六进制

以下都以-86,并且为8为二进制为例子: 对于+86不用说,其八位二进制表示为: (一)0 1 0 1 0 1 1 0 对于-86来说,需要将+86按位取反: (二)1 0 1 0 1...
  • jiaomenglei
  • jiaomenglei
  • 2016年10月03日 17:55
  • 2035

JAVA中负数转二进制分析

最近在看集合源码,发现ArrayDeque里面用到了大量的&运算,这牵扯到了二进制。突然发现自己对负数的二进制有点模糊了,对此进行了一些支持补充。 首先我们要对原码、反码和补码有个了解: ...
  • cl05300629
  • cl05300629
  • 2014年09月09日 14:24
  • 2010

负数的二进制和十进制之间的转换

负数的二进制和十进制之间的转换: 1. 十进制负数转换为二进制的方法为: 1、将十进制转换为二进制数。 2、对该二进制数求反。 3、再将该二进制数加1. 总之就是将十进制数转换为二进制数求...
  • u013168615
  • u013168615
  • 2016年03月07日 22:05
  • 4379

用递归函数将十进制转化为二进制

第2周报告1实验目的:学会使用函数的递归 实验内容:用递归函数求解表达式 * 程序头部注释开始程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生  * A...
  • shitoujianqiang123
  • shitoujianqiang123
  • 2012年02月27日 19:53
  • 2543

关键的一步啊,负数的二进制转换,(当然还有小数)

代码如下: #include void main() { int a,i,j; float b; int A[10]; float B[10]; printf...
  • xiaowen901018
  • xiaowen901018
  • 2016年03月08日 11:30
  • 275

Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换

Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换
  • jingjbuer
  • jingjbuer
  • 2015年01月13日 21:02
  • 2410
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将负数转换为二进制
举报原因:
原因补充:

(最多只允许输入30个字)