黑马程序员技术交流社区

标题: 关于进制的问题 [打印本页]

作者: 胡宝林    时间: 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乘以20次方+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)

QQ截图20120914133756.png

作者: 李健_8    时间: 2012-9-16 14:24
其实  这是告诉你计算是如何识别语言的  计算机只识别二进制语言  我们所看到的符号   在计算机内部  都是有二进制表示的   事实上  后面的编程根本用不到这些  你还是先将精力放在java基础上吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2