黑马程序员技术交流社区
标题: 关于进制的问题 [打印本页]
作者: 胡宝林 时间: 2012-9-14 10:44
标题: 关于进制的问题
进制没学明白
怎么用一个8bit的字节表示十进制的-1
还有就是计算一个二进制的方法是
将要转换的数编号,编号从低位开始,从0开始,将每一位上的数乘以进制数的编号次方,最后将所有乘得的结果相加就是十进制表现形式。
如
11010=0*2(0)+1*2(1)+0*2(2)+1*2(3)+1*2(4) 0乘以2的0次方+1乘以2的一次方。。。。
那么11111111 11111111 11111111 11111111 4个字节的 每一位都是1 以上面的方法计算 1*2(0)+1*2(1)....+1*2(31) 得到的应该是一个非常大的十进制数
但是实际上11111111 11111111 11111111 11111111 表示的是-1
还有就是一个字节byte的范围是-127到128 但是1111 1111 表示的二进制确是255 这些都是为啥啊 求高手解答
作者: 郭亮 时间: 2012-9-14 11:38
你问的这些都是很基础的啊··跟数学有那么点毛线的关系···
8进制的-1是17777777777777777777777
-1的二进制是0的反过来···不是按正数那么算的··你看书没看仔细这个书上有
最后个问题····0也还算一位 不就256吗······
作者: 程金 时间: 2012-9-14 11:54
本帖最后由 程金 于 2012-9-14 12:00 编辑
在计算机中存储数是补码的形式,正数的补码是原码,比如1就是00000001,而负数的补码是: 他的原码除了符号位外,其他所以位取反,然后加1,比如-1原码10000001,取反11111110,再+1就是11111111.知道了这些,我想你的所有的疑惑都迎刃而解
补充一下最后一问,btye有符号的话就是-128到127,无符号的话就是0-255,因为有符号的时候符号占用了一位,只有7位,7位能标示的最大值是127
作者: 夏天 时间: 2012-9-14 12:35
如果上面解释得都不够清楚,而且你还没懂,而且还有分的话。。我吃完回来,慢慢喷~~
作者: 翁鹏 时间: 2012-9-14 12:45
本帖最后由 翁鹏 于 2012-9-14 12:53 编辑
无符号数 和 有符号数 的区别!!
JAVA里是没有像C语言中的无符号类型!! 所以JAVA中1111-1111是有符号的 结果是-1。 你可以去查看下 JAVA 与 C 基本数据类型的范围。
注意 JAVA里的基本数据类型都是带符号的~~~~
无符号类型最高位不是符号位,所以 1111-1111 按你算的确实是255 无符号最小 0000-0000 是0。 所以无符号 byte 的范围是0-255。
有符号类型最高位代表符号位,0代表正数,1代表负数。 所以 0111-1111 正数 127。
1000-0000 为 -128 。 -1×2^7=-128 。 1111-1111 就是 -128 + 127 = -1。
所以有符号 byte 类型的范围是 -128(最小)- 127(最大)。
诶 这个应该是没分的吧!
作者: 冯培军 时间: 2012-9-14 13:38
第一个问题:
计算机所有的数都是用补码的形式表示的。
一个正数的原码、补码、反码都是一样的,负数的原码就是这个正数的最高为1,反码就是除最高位不变,其他位0变1,1变0。补码就是反码加1,
例如 -7的计算机表示形式 :0000 0111(7的原码)------1000 0111(-7的原码)------1111 1000(-7的反码)-----1111 1001(-7的补码)。
所以一个字节 表示-1 是1111 1111
第二个问题:
八进制表示形式: 014:0000 1100(二进制),每三位二进制表示一位八进制数字。八进制在程序中以0开头.
十进制表示形式: 14: 0000 1110(二进制),直接累加。
十六进制表示形式:0x14:0001 0100(二进制),每四位二进制表示一位十六进制数字。十六进制在程序中以0x开头.
只要十进制数有正负之分。
我们记住一个规则 1 2 4 8 16 32 64 ....2的N次方,规则由来:(见下图)
第三个问题:
java中规则最高位来表示数的正负,所以 一个byte只能表示 -127到128 根本不能表示255 255是short 或者 int char类型 如果是short
0000 0000 1111 1111
-
QQ截图20120914133756.png
(92.47 KB, 下载次数: 14)
作者: 李健_8 时间: 2012-9-16 14:24
其实 这是告诉你计算是如何识别语言的 计算机只识别二进制语言 我们所看到的符号 在计算机内部 都是有二进制表示的 事实上 后面的编程根本用不到这些 你还是先将精力放在java基础上吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |