黑马程序员技术交流社区

标题: 基本类型一个有很有趣的问题 [打印本页]

作者: 陈建凡    时间: 2012-2-18 09:09
标题: 基本类型一个有很有趣的问题
本帖最后由 陈建凡 于 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);
   
   }
   
   
}

运行的结果:
   


还有的类型,我没有试,我想也是一样的。
作者: 黄锦成    时间: 2012-2-18 09:35
这个我见过。它的最大值加1,会变成最小值,就像一个时钟那样
作者: 邱纲    时间: 2012-2-18 09:39
这个是很正常的啊,一个字节的取值范围是-128~127
作者: 李晓俊老师    时间: 2012-2-18 09:52
只拿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了..这和我们现实数学中的数学常理有点不一样,呵呵,
作者: 彭小芳    时间: 2012-2-18 10:02
这就是数据溢出的表现,当一个数,达到最大值时再自增,就会变为最小值,这在C语言中就提到过
作者: 戚雪晖    时间: 2012-2-18 10:10
本帖最后由 1毫秒的价值 于 2012-2-18 10:22 编辑

这个是电路开关原理,因为在内存中是存的是二进制,而为什么要把数据存为二进制呢?
因为内存这个硬件里面的电路结构可以简化看成电路开关(其实应该是磁针,因为电磁反应而改变物理的指向,硬盘也是一样,不过断电后他可以保存磁针的指向),开关只有开或者关(当然可以同过扩展加上半开状态),先就拿两种说:
数据类型确定了,就是告诉电脑这个数据类型要多少个开关,例如:byte类型给了8个开关来表示数据,关就是0,开就是1。排列组合的个数是一定的。当你操作数据时候到127时候再加1,当然,在byte范围内没有多余的开关组合来表示更加多的数字了,这时候底可以想象层电路就另加了8个开关来表示这个数,但是byte类型只能取原来的8个位置的数据,所以结果还是原来那8个开关的组合数据,根据这个原理,在超出了开关表示范围的时候,可以直接让电路回转,从而不必开启更多的开关组,这样就保证了数据的安全性能从而提高了电脑的安全性能。假设你没有这个回转功能,你电脑运行那么多程序,数据早就乱了套了。
作者: 成果    时间: 2012-2-18 10:23
楼主有材。
作者: 花开~的季节    时间: 2012-2-18 10:41
很正常:byte范围为-128-127,-128--自然变成127,别人问知道就行了,
作者: 最初的理想    时间: 2012-2-18 20:16
李晓俊 发表于 2012-2-18 09:52
只拿byte来说吧,因为道理都一样.我们知道byte在内存中只分配8个二进制位的.那么这8个二进制位所表示的数值 ...

很详细,很清楚




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