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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bushangkoukou 中级黑马   /  2013-5-19 16:08  /  1395 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 bushangkoukou 于 2013-5-19 18:21 编辑

最近在温习二进制,有个二进制的问题一直困扰着我

负数的二进制的问题,比如十进制的6  它的二进制是110,这个大家都知道,那-6呢,它二进制是什么

视频里是这么说的:-6的二进制其实就是6的二进制取反+1,

最后结果是1111 1111 1111 1111 1111 1111 1111 1010

那我的困惑是1111 1111 1111 1111 1111 1111 1111 1010这个是不是也表示正的数,如果正数也用这个表示,当然这个数比较大,那会不会二进制中正数和负数会混淆???

评分

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

查看全部评分

5 个回复

倒序浏览
本帖最后由 8047107 于 2013-5-19 16:41 编辑

你可以用代码转换一下 看看很清楚的
或者使用计算机 这么长的一大串 转换过来是-6  不是很大的正数

很奇怪。1111111111111111111111111111111111111111111111111111111111111010  一共64个2进制位,转换之后是-6
随便取消中间的一个1或者0.就变成很大的正数了。不知道为什么是64个二进制位 不是32最多嘛?这个明白了。是因为我自己选择的是四字的,选择双字的就是32位了
楼主建议你用计算器试一下,11111111111111111111111111111010这个转换之后是-6 去掉中间的一位就是很大的正数了

评分

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

查看全部评分

回复 使用道具 举报
在java中整数的正数的二进制最高位为0
负数的二进制最高位用1表示
回复 使用道具 举报
我觉得负数负的得越多 中间的0也就越多。负数肯定是1开头的 正数的2进制也肯定是0开头的。
你用计算器试试 选择双字  十进制状态下 能输入的最多是999999999 转换后的2进制111011100110101100100111111111 最多也就是30位。说明前面还有2个0.
所以最高位如果在32位上,又是1的话。转换过来肯定是负数。楼主可以按照我的方法试试
回复 使用道具 举报
负数是取反嘛
回复 使用道具 举报
java中是采用补码来表示数据的 补码的特点是用数据的最高位来区别正负 如果数据的最高位是0就是正数,最高位是1表示负数。你可以这样理解java中的正数是从每个二进制位都是0开始计数的,而负数是从全1开始计数的。也就是说全1表示的是-1。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马