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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© GSF@ 初级黑马   /  2014-12-16 22:34  /  2431 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 GSF@ 于 2014-12-16 22:36 编辑

视频中讲到java数据类型的取值范围我就不太清楚了,一个byte是8位,
比如二进制                   0                  1                    0                  1                  0                    1                    0                      1
对应十进制             2的7次方  +  2的6次方  +  2的5次方  +  2的4次方  +  2的3次方  +  2的2次方  +   2的1次方    +   2的0次方  

                                  128       +      64         +       32        +      16       +       8          +        4         +       2            +         1


老师说byte的范围是                  127   ~  -128
但是我有疑问,  1.为啥不是      128   ~   -128?  
                         2.既然范围值得是   最大~最小  为什么最大范围不是11111111对应的 255?
比如二进制                   1                  1                    1                  1                  1                    1                    1                      1
对应十进制             2的7次方  +  2的6次方  +  2的5次方  +  2的4次方  +  2的3次方  +  2的2次方  +   2的1次方    +   2的0次方  

                                  128       +      64         +       32        +      16       +       8          +        4         +       2            +         1

感觉概念有点乱。




25 个回复

倒序浏览
这个进制我也没有搞明白是怎么回事。
回复 使用道具 举报
陈均林 发表于 2014-12-16 22:43
这个进制我也没有搞明白是怎么回事。

那一起坐等答案吧
回复 使用道具 举报
简单解释下,数都是由二进制组成的,这是八位的数字。八个1也就是0111 1111 最高为0表示正数。后面的111 1111转换为十进制就是127了。这是计算机基础里面的东西。
回复 使用道具 举报
czwanglei 发表于 2014-12-16 23:11
简单解释下,数都是由二进制组成的,这是八位的数字。八个1也就是0111 1111 最高为0表示正数。后面的111 11 ...

最小范围,也就是1111 1111 , 十进制为127,
0111 111 和 1111 1111 的第一个“1”或“0”只代表符号,不参与运算,并也正数只能是“0”,负数只能是“1”,是这样?
回复 使用道具 举报
GSF@ 发表于 2014-12-16 23:38
最小范围,也就是1111 1111 , 十进制为127,
0111 111 和 1111 1111 的第一个“1”或“0”只代表符号, ...

后面的对,前面的不对。最小范围,也就是1111 1111 , 十进制为-128,怎么算的。  去网上搜搜自己自学下。。
回复 使用道具 举报
当初的设计者就是这样设计的,就像自然规律就这样,这就是规则
回复 使用道具 举报
GSF@ 初级黑马 2014-12-17 00:37:54
8#
青衫禅客 发表于 2014-12-17 00:28
当初的设计者就是这样设计的,就像自然规律就这样,这就是规则

应该是能说通的,我只是理解的不够透彻
回复 使用道具 举报
GSF@ 发表于 2014-12-17 00:37
应该是能说通的,我只是理解的不够透彻

把它认定为规定就行了。
回复 使用道具 举报
补码表示的数,是没有正负0的,因此除了最高位的符号位以外,可以表示的数最大为 127,因此最大为 +127  ,又因为 10000000,并不是表示为  -0   因此用 1000000表示 -128,《计算机结构原理》里有,我是计算机专业的,有学过
回复 使用道具 举报
老师经常说不要问我什么,记住,运用就行。这是创造它的时候规定的。
回复 使用道具 举报
GSF@ 初级黑马 2014-12-17 11:14:25
12#
ql627666537 发表于 2014-12-17 09:11
老师经常说不要问我什么,记住,运用就行。这是创造它的时候规定的。

也是哦,我太咬文嚼字了,谢谢
回复 使用道具 举报
GSF@ 初级黑马 2014-12-17 11:15:43
13#
czwanglei 发表于 2014-12-16 23:42
后面的对,前面的不对。最小范围,也就是1111 1111 , 十进制为-128,怎么算的。  去网上搜搜自己自学下 ...

嗯嗯,我马上去查,谢谢了
回复 使用道具 举报
最高位是符号位呀,还外加一个0这个特殊的元素
回复 使用道具 举报
楼主没有搞清楚一件事:负数的二进制表示。
byte i = 1;  // i =  00000001
byte j = -1; // j = 11111111
-1怎么表示的呢?负数是正数二进制的反码加1,那什么是反码呢?反码就是把正数的每一位二进制取反。
正数 1 =  00000001;
1的反码为:11111110;
反码加1就是-1 = 11111111;

所以00000000~011111111表示正数的0~127;
10000000~11111111表示负数的-128~-1。


回复 使用道具 举报
GSF@ 初级黑马 2014-12-17 16:38:31
16#
Little_Pea 发表于 2014-12-17 15:45
楼主没有搞清楚一件事:负数的二进制表示。
byte i = 1;  // i =  00000001
byte j = -1; // j = 11111111

谢谢啊,你说的很清楚。负数的二进制表示我弄清楚了。
负数前面是0,正数前面是1,能改变?如过不能改变, +128 不就是1000 0000
回复 使用道具 举报
GSF@ 发表于 2014-12-17 16:38
谢谢啊,你说的很清楚。负数的二进制表示我弄清楚了。
负数前面是0,正数前面是1,能改变?如过不能改变 ...

不能改变,最高位是符号位,这是规定好的。byte不能表示128,超出范围了。10000000只能是-128。
回复 使用道具 举报
有的东西没必要深究  研究可以 只能做个延伸 一个问题不要过于去深究
回复 使用道具 举报
没啥意识啊
回复 使用道具 举报
GSF@ 初级黑马 2014-12-17 23:40:51
20#
王晓杰 发表于 2014-12-17 22:26
有的东西没必要深究  研究可以 只能做个延伸 一个问题不要过于去深究

ENEN ,很赞成你的话
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马