黑马程序员技术交流社区
标题: 进制的简单问题 [打印本页]
作者: Yoyoqiu 时间: 2016-3-20 10:36
标题: 进制的简单问题
二进制 0B 0b 0b100
八进制 0 0100
十进制 100
十六进制 0X 0x 0x100
原码反码补码只说的是二进制 计算机 只接受二进制
已经知道原码求补码
0B11001011
疑问
有没有这种 0X11001011
= 1*16^7+1*16^6+1*16^3+1*16^1+1*16^0
那八进制的呢 011001011 怎么办 那最高位正负怎么表示
是不是原码反码补码就不能用 0B 0 0X 表示
我凌乱了
作者: q6619866 时间: 2016-3-20 11:30
我记得看视频的时候说虚拟机运算的时候是以补码的形式运算,按照我的理解,虚拟机运算的时候会将八进制,十进制,十六进制转换成二进制,然后再转换成补码运算.
作者: debuggerx01 时间: 2016-3-20 13:28
没太看懂你的疑问。
不过既然你都已经知道,进制计算的时候要换算成2进制进行,那解释就简单了。
比如说你已经知道10进制的10用8进制是12,想知道8进制的-10的话,那就先算出10的2进制是 0000 0000 0000 1010,然后根据正负两个数的2进制值相加会以“在最高位的基础上进一位的方式得到0”,得出-10的2进制为 (1) 0000 0000 0000 0000减去 0000 1010,得到 1111 1111 1111 0110,然后用2进制数算8进制数就是三位三位的看,也就是 (00)1 111 111 111 110 110,由此得到177766就是10进制的-10的8进制表示。
作者: debuggerx01 时间: 2016-3-20 13:45
额……又仔细看了一遍问题,,原来是LZ在问“是不是原码反码补码就不能用 0B 0 0X 表示”……好吧,答案是“YES”。。
不过这个说法本身就不对,所谓的原码反码补码就只是针对2进制数的,是计算机用来存储和计算用的(码就代表了只有0和1),其他进制数“没有原反补”,有的是“相应的2进制数的原反补”。。
另外,正负号这个概念只适用于10进制,你拿电脑自带的计算器试一试,输入一个负数,然后切换到其他进制,再切换存储长度(字 字节 双字 四字),你就会发现同一个负数在某一进制下(2、8、16),随着存储长度的变化其表示值也是不同的,这就是我上面写的算法决定的。。
作者: Yoyoqiu 时间: 2016-3-20 14:59
谢谢解答 看了好几遍 是不是 这样理解
原码反码补码 就是针对二进制
八进制 十进制 十六进制没有这种说法
那么 如果我要求 十进制下的-10的 八进制表示 结果是什么
如果先转换成二进制 在原反补算 再转成八进制
用一个字节 两个字节 三个字节 算出来结果都是不同的 就是前面补0的时候 因为补0的多少不一样 所以 结果不一样
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |