A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘俊强 中级黑马   /  2014-4-10 18:32  /  2349 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天遇到一个问题,不知道用二进制怎么表示负数,请大神指点一下。

10 个回复

倒序浏览
-7的二进制  1000 0111
-13的二进制1000 1101
一个数你可以把它当成是正数, 也可以把它当成是负数, 就看你的需要了

在有符号数中二进制最高位是1的就是负数, 0就是正数

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
负数在内存中表示就是取反再加1,比如6,在内存中的二进制是0000-0000 0000-0000 0000-0000 0000-0111,负6就是取反再加1,在内存中的表示是1111-1111 1111-1111 1111-1111 1111-1001,
回复 使用道具 举报
对于补码来说,其实就是最前一位为1,最高位表示符号位正为0,负为1,在数值上,除去最高位,正负数是一样的,负数可以由正数按位取反,然后加1就行!
回复 使用道具 举报
1号位是符号位。0正,1负。
用负数对应的正数的补码表示。
        System.out.println(Integer.toBinaryString(1));  
         System.out.println(Integer.toBinaryString(-1));
输出结果:
   1
11111111111111111111111111111111

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
在计算机中,负数以其正值的补码形式表达。

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

 

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

比如 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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
LHP 发表于 2014-4-10 20:11
在计算机中,负数以其正值的补码形式表达。

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

基本的这个大哥都说的差不多啦。

简单解释一下就是首先将需要变成负数都的二进制数前面用0补足32位;

然后对整个数进行取反,0取反得1,将32位二进制数取反完毕之后得数加1;

按照二进制运算原则,0加1得1,1加1进一位。

这样就能得到你希望变成负数得二进制表现形式了。
回复 使用道具 举报
show_play 发表于 2014-4-10 18:33
-7的二进制  1000 0111
-13的二进制1000 1101
一个数你可以把它当成是正数, 也可以把它当成是负数, 就看你 ...

是不是我也可以这样理解
1000 0001 可以看作十进制的-1也可以看作十进制的129?是这样么?
回复 使用道具 举报
李程 中级黑马 2014-4-12 13:03:40
9#
写出绝对值的二进制,然后各位取反,最后加一
回复 使用道具 举报
本帖最后由 无此姓名 于 2014-4-13 18:36 编辑

简单说就是牺牲掉一用作标志位。楼主可以看一下我的帖子:关于原码、反码、补码,以及计算机中负数的表示原理 http://bbs.itheima.com/thread-109226-1-1.html
一直很纳闷这篇帖子为什么没给技术分,虽然这些东西实际开发中完全没用,但我写的非常认真啊。:(
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马