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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡宝林 中级黑马   /  2012-9-14 10:44  /  1957 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

进制没学明白
怎么用一个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 这些都是为啥啊 求高手解答

评分

参与人数 1黑马币 +10 收起 理由
刘芮铭 + 10 其实基础很重要的,大家都不要忽略.

查看全部评分

6 个回复

倒序浏览
你问的这些都是很基础的啊··跟数学有那么点毛线的关系···
8进制的-1是17777777777777777777777
-1的二进制是0的反过来···不是按正数那么算的··你看书没看仔细这个书上有
最后个问题····0也还算一位 不就256吗······
回复 使用道具 举报
本帖最后由 程金 于 2012-9-14 12:00 编辑

在计算机中存储数是补码的形式,正数的补码是原码,比如1就是00000001,而负数的补码是: 他的原码除了符号位外,其他所以位取反,然后加1,比如-1原码10000001,取反11111110,再+1就是11111111.知道了这些,我想你的所有的疑惑都迎刃而解

补充一下最后一问,btye有符号的话就是-128到127,无符号的话就是0-255,因为有符号的时候符号占用了一位,只有7位,7位能标示的最大值是127

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新手回答,牢记基础

查看全部评分

回复 使用道具 举报
如果上面解释得都不够清楚,而且你还没懂,而且还有分的话。。我吃完回来,慢慢喷~~
回复 使用道具 举报
本帖最后由 翁鹏 于 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(最大)。
诶 这个应该是没分的吧!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新手回答,牢记基础

查看全部评分

回复 使用道具 举报
第一个问题:
计算机所有的数都是用补码的形式表示的。
一个正数的原码、补码、反码都是一样的,负数的原码就是这个正数的最高为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, 下载次数: 15)

QQ截图20120914133756.png

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 图文并茂,解释的不错

查看全部评分

回复 使用道具 举报
其实  这是告诉你计算是如何识别语言的  计算机只识别二进制语言  我们所看到的符号   在计算机内部  都是有二进制表示的   事实上  后面的编程根本用不到这些  你还是先将精力放在java基础上吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马