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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈建凡 中级黑马   /  2012-2-18 09:09  /  2250 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈建凡 于 2012-2-18 09:33 编辑

贴出代码
class aa
{

  public static void main(String [] args)
   {
     byte a=-128;a=--a;
    System.out.println("byte a="+a);
     byte b=127;b=++a;
      System.out.println("byte b="+b);
      
      short aa=-32768;aa=--aa;
      System.out.println("short aa="+aa);
      
      short bb=32767;bb=++bb;
      System.out.println("short aa="+bb);
   
   }
   
   
}

运行的结果:
   


还有的类型,我没有试,我想也是一样的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
这个我见过。它的最大值加1,会变成最小值,就像一个时钟那样

评分

参与人数 1黑马币 +5 收起 理由
荣凯旋 + 5

查看全部评分

回复 使用道具 举报
这个是很正常的啊,一个字节的取值范围是-128~127
回复 使用道具 举报
只拿byte来说吧,因为道理都一样.我们知道byte在内存中只分配8个二进制位的.那么这8个二进制位所表示的数值范围就是-128到127.如果存入byte的数值不在这个范围内,那么会只取该数值二进制的最低8位...所有在第一个输出语句中,a自减一次为-129..它的二进制表示为11111111  01111111,byte只会取它的最后8位,也就是01111111,这个数换成十进制正好是127...所有第一个输出为 a=127;第二个输出语句中把a的值自增一次赋给b,这时b=128,,它的二进制为00000000  10000000,
同样取最低8位,就是10000000,,这个数换成十进制就是-128了..这和我们现实数学中的数学常理有点不一样,呵呵,

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
这就是数据溢出的表现,当一个数,达到最大值时再自增,就会变为最小值,这在C语言中就提到过

评分

参与人数 1黑马币 +5 收起 理由
荣凯旋 + 5

查看全部评分

回复 使用道具 举报
本帖最后由 1毫秒的价值 于 2012-2-18 10:22 编辑

这个是电路开关原理,因为在内存中是存的是二进制,而为什么要把数据存为二进制呢?
因为内存这个硬件里面的电路结构可以简化看成电路开关(其实应该是磁针,因为电磁反应而改变物理的指向,硬盘也是一样,不过断电后他可以保存磁针的指向),开关只有开或者关(当然可以同过扩展加上半开状态),先就拿两种说:
数据类型确定了,就是告诉电脑这个数据类型要多少个开关,例如:byte类型给了8个开关来表示数据,关就是0,开就是1。排列组合的个数是一定的。当你操作数据时候到127时候再加1,当然,在byte范围内没有多余的开关组合来表示更加多的数字了,这时候底可以想象层电路就另加了8个开关来表示这个数,但是byte类型只能取原来的8个位置的数据,所以结果还是原来那8个开关的组合数据,根据这个原理,在超出了开关表示范围的时候,可以直接让电路回转,从而不必开启更多的开关组,这样就保证了数据的安全性能从而提高了电脑的安全性能。假设你没有这个回转功能,你电脑运行那么多程序,数据早就乱了套了。

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
成果 黑马帝 2012-2-18 10:23:01
7#
楼主有材。
回复 使用道具 举报
很正常:byte范围为-128-127,-128--自然变成127,别人问知道就行了,
回复 使用道具 举报
李晓俊 发表于 2012-2-18 09:52
只拿byte来说吧,因为道理都一样.我们知道byte在内存中只分配8个二进制位的.那么这8个二进制位所表示的数值 ...

很详细,很清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马