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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沙漠侧行者 中级黑马   /  2014-5-5 21:06  /  1942 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个十进制的负数可以通过取反加一的方式转换成一个二进制数,那么转换成的二进制数应该怎么转换成一个其他进制的数?
比如-1可以转换成二进制数:1111 1110 该二进制数该怎么转换成一个16进制或者8进制的数?

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 加油!

查看全部评分

18 个回复

倒序浏览
负数的二进制是其绝对值的二进制取反再加1,所以,-1的二进制求法如下:
1) 绝对值二进制 0000-0000 0000-0000 0000-0000 0000-0001
2)取反                1111-1111 1111-1111 1111-1111 1111-1110
3)加1              + 0000-0000 0000-0000 0000-0000 0000-0001
                        ------------------------------------------------------
                            1111-1111 1111-1111 1111-1111 1111-1111
换算成16进制每4位当一位:即 FFFFFFFF
8进制每3位当一位:即37777777777
回复 使用道具 举报
上面的哥们,这些转换对吗?
回复 使用道具 举报
本帖最后由 646245771 于 2014-5-6 19:30 编辑

首先先把一个整数的转二进制、八进制、十六进制给楼主详细讲解一下,这都是万变不离其宗的,拿60为例吧:
  1. 0000 0000 0000 0000 0000 0000 0011 1100  //这是60的二进制
复制代码


60的八进制怎么算呢?很简单,因为八进制是满8进一,所以最大的数只能取到7,也就是三个二进制位换算成一个八进制位,可以得到以下结果
  1. 000 000 000 000 000 000 000 000 000 111 100 // 不足三个二进制的话,用0补,
  2. 0   0   0   0   0   0   0   0   0   7   4
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. 60 的二进制就是 74
复制代码

60的十六进制,同八进制一样,只不过是满16进一,所以最大的数只能取到15,也就四个二进制位换算成一个十六进制位,可以得到以下结果
  1.   0000 0000 0000 0000 0000 0000 0011 1100
  2.   0    0    0    0    0    0    3    C //超过9的值,用A(10)、B(11)、C(12)、D(13)、E(14)、F(15)表示
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. 60 的二进制就是 3C
复制代码
负数的话,就是同理啊,先把-1换算成二进制,然后同上述办法就行了。 -1 = 1取反+1 等于
  1. 0000 0000 0000 0000 0000 0000 0000 0001  = 1
  2. 1111 1111 1111 1111 1111 1111 1111 1110  取反
  3. 0000 0000 0000 0000 0000 0000 0000 0001   +1
  4. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5. 1111 1111 1111 1111 1111 1111 1111 1111   =-1

  6. 这是-1的 二进制
  7. 11 111 111 111 111 111 111 111 111 111 111
  8. 3   7   7   7   7   7   7   7   7   7   7  
  9. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10. 这是-1的 八进制

  11. 1111 1111 1111 1111 1111 1111 1111 1111
  12.   F    F    F    F    F    F    F    F
  13.   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  14. 这是十六的
复制代码
如果想再转成十进制,那就按照相反的方法,把二进制再取反+1,怎么可能数值发生改变呢?


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
只是说一下自己的思路哈,有什么不对的欢迎指出来,感觉2楼的方法有问题,-1 换成其他进制就变成正数了吗?二进制是机械码,虽然表示起来可能不太一样,但是表示出来的数应该是不能变的,否则,存储起来数值变了的话,那么存储的意义在哪里啊,个人认为,对于负的二进制数,应该先取反加一,变成他的正数,然后再用三位2进制位变一位8进制位,或者4位二进制位变一位16进制位的方法,然后再加一个负号就行了吧,8进制,16进制不是机械码嫁,跟10进制一样,加负号就行了吧……

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我感觉这个很简单啊...=.=,
三个二进制位是一个八进制位,四个二进制位是一个十六进制位,
二进制数转八进制:011  111  110-->3 7 6
二进制转十六进制:1111 1110-->F  E

不信你可以用计算器验证=.=
回复 使用道具 举报
姜蕾蕾 发表于 2014-5-5 22:37
只是说一下自己的思路哈,有什么不对的欢迎指出来,感觉2楼的方法有问题,-1 换成其他进制就变成正数了吗? ...

和你想的一样的...
回复 使用道具 举报
646245771 发表于 2014-5-5 22:26
按照楼主说的-1来算的话,分析起来,怕楼主看的不够直观跟明确,咱们就以60为例吧。60的二进制是

不敢苟同

3   7   7   7   7   7   7   7   7   7   7  

F    F    F    F    F    F    F    F
应该不是正数吧
回复 使用道具 举报
姜蕾蕾 发表于 2014-5-5 22:37
只是说一下自己的思路哈,有什么不对的欢迎指出来,感觉2楼的方法有问题,-1 换成其他进制就变成正数了吗? ...

你名字是姜蕾蕾吗?现在在上0428 Java基础班是吧?
回复 使用道具 举报
☆枫の云 发表于 2014-5-5 23:35
我感觉这个很简单啊...=.=,
三个二进制位是一个八进制位,四个二进制位是一个十六进制位,
二进制数转八进 ...

二进制转十六进制:1111 1110-->F  E
负数转成正数?
回复 使用道具 举报
沙漠侧行者 发表于 2014-5-6 00:15
二进制转十六进制:1111 1110-->F  E
负数转成正数?

看错了=.=,-1的二进制我就按你给的1111 1110算的,应该是1111 1111 1111 1111 1111 1111 1111 1111,所以楼上那两哥们儿回答的应该是对的,你可以用计算器验证的,想传个图,可惜权限不够,哎
回复 使用道具 举报
沙漠侧行者 发表于 2014-5-6 00:12
不敢苟同

3   7   7   7   7   7   7   7   7   7   7  

这肯定不是正数啊   这就是 -1的二进制、八进制、十六进制  要是想取成正数,把负数的二进制再取反+1即可,数值怎么会发生改变呢?我不明白楼主是怎么理解的 :L
回复 使用道具 举报
顶了AAAA
回复 使用道具 举报
在网上查了一下资料, 想飞的鱼 646245771 ☆枫の云 的回答应该是正确的,看来是我想多了
回复 使用道具 举报
沙漠侧行者 发表于 2014-5-6 00:14
你名字是姜蕾蕾吗?现在在上0428 Java基础班是吧?

楼主认识我吗?你也是我们班的?
回复 使用道具 举报
姜蕾蕾 发表于 2014-5-14 22:45
楼主认识我吗?你也是我们班的?

是滴 我认识你
回复 使用道具 举报

你是我们班的吗,是谁?:victory:
回复 使用道具 举报
本帖最后由 墨香 于 2014-5-17 23:28 编辑

这是计算机专业的问题,给你详述下吧:
计算机中常用的数的进制主要有:二进制、八进制、十六进制,学习计算机要对其有所了解。
2进制,用两个阿拉伯数字:0、1;
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
10进制,用十个阿拉伯数字:0到9;
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
以下简介各种进制之间的转换方法:
一、二进制转换十进制
例:二进制 “1101100”
1101100 ←二进制数
6543210 ←排位方法
例如二进制换算十进制的算法:
1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20
↑ ↑
说明:2代表进制,后面的数是次方(从右往左数,以0开始)
=64+32+0+8+4+0+0
=108
二、二进制换算八进制
例:二进制的“10110111011”
换八进制时,从右到左,三位一组,不够补0,即成了:
010 110 111 011
然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
结果为:2673
三、二进制转换十六进制
十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:
0101 1011 1011
运算为:
0101 = 4+1 = 5
1011 = 8+2+1 = 11(由于10为A,所以11即B)
1011 = 8+2+1 = 11(由于10为A,所以11即B)
结果为:5BB

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 沙漠侧行者 于 2014-5-17 23:41 编辑

                                                     
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马