黑马程序员技术交流社区
标题:
关于负数的二进制的问题
[打印本页]
作者:
bushangkoukou
时间:
2013-5-19 16:08
标题:
关于负数的二进制的问题
本帖最后由 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这个是不是也表示正的数,如果正数也用这个表示,当然这个数比较大,那会不会二进制中正数和负数会混淆???
作者:
8047107
时间:
2013-5-19 16:29
本帖最后由 8047107 于 2013-5-19 16:41 编辑
你可以用代码转换一下 看看很清楚的
或者使用计算机 这么长的一大串 转换过来是-6 不是很大的正数
1.jpg
(51.89 KB, 下载次数: 0)
下载附件
2013-5-19 16:31 上传
2.jpg
(53.99 KB, 下载次数: 0)
下载附件
2013-5-19 16:31 上传
很奇怪。1111111111111111111111111111111111111111111111111111111111111010 一共64个2进制位,转换之后是-6
随便取消中间的一个1或者0.就变成很大的正数了。不知道为什么是64个二进制位 不是32最多嘛?这个明白了。是因为我自己选择的是四字的,选择双字的就是32位了
楼主建议你用计算器试一下,11111111111111111111111111111010这个转换之后是-6 去掉中间的一位就是很大的正数了
作者:
神之梦
时间:
2013-5-19 16:34
在java中整数的正数的二进制最高位为0
负数的二进制最高位用1表示
作者:
8047107
时间:
2013-5-19 16:46
我觉得负数负的得越多 中间的0也就越多。负数肯定是1开头的 正数的2进制也肯定是0开头的。
你用计算器试试 选择双字 十进制状态下 能输入的最多是999999999 转换后的2进制111011100110101100100111111111 最多也就是30位。说明前面还有2个0.
所以最高位如果在32位上,又是1的话。转换过来肯定是负数。楼主可以按照我的方法试试
作者:
画饼
时间:
2013-5-19 17:21
负数是取反嘛
作者:
郑齐育
时间:
2013-5-19 18:19
java中是采用补码来表示数据的 补码的特点是用数据的最高位来区别正负 如果数据的最高位是0就是正数,最高位是1表示负数。你可以这样理解java中的正数是从每个二进制位都是0开始计数的,而负数是从全1开始计数的。也就是说全1表示的是-1。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2