In java, range of byte : -128 ----- 127(for SCJP)
来源:互联网 发布:锁屏后仍能录像的软件 编辑:程序博客网 时间:2024/05/17 23:57
byte b = 127;
b += 1;
System.out.println(b);
根据前面的介绍,byte类型的取值区间是-128~127,由于复合赋值运算符不改变结果的类型,则导致结果是-128,而不是128。
原因如下:
byte类型值127的机器数是01111111,0表示正数,后续的数值表示127
该数值加1后,得到的数值是10000000,二进制加法
而10000000在byte类型中恰好是-128的机器数表示形式
其它类型的符合运算符也可能存在类似的情况,使用时需要注意。
===========================================================
Question :
byte a=100;
byte b=120;
byte c=(byte)(a+b);
System.out.println(c);
相加超出byte范围 怎么出来1个负的数???
Answer :
1个byte是8个bit 也就可以表示256个数
java中用它来表示-128~127 这一整数段
二进制数 01111111表示127
它的下一顺序位10000000 直接对应的是128 但因为需要它表示的是有符号数
所以10000000就用来表示了-128 转换方式是反码+1(二进制) 同理对应129的10000001
就用来表示有符号数-127了
上面的程序中的a+b= 220 即 11011100 经反码+1后 =>00100100 是十进制的36
所以最后显示结果就是-36
-------------------------------------------------------
另外,byte 在内存里只占一个字节,即八位。a + b = 220,超出了范围。
执行byte c=(byte)(a+b); 时(a+b)自动转换为int型,int 型是四个字节的,三十二位,应为:
0000 0000 0000 0000 0000 0000 1101 1100
强制转换为byte型时,在内存中只保存到四个字节中的一个字节,即是保存了八位,为:
1101 1100
计算机中是用补码来表示,所以输出的是-36。
本来一个byte,8个比特,有256种状态,正好-128到+127是256个数,一个状态也没浪费。
- In java, range of byte : -128 ----- 127(for SCJP)
- Java(一些基础) for SCJP
- python for in range
- java.io.IOException: Tried to send an out-of-range integer as a 2-byte value
- 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
- 'ascii' codec can't decode byte 0xc4 in position 27: ordinal not in range(128)
- 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
- ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128)
- ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128)
- 'ascii' codec can't decode byte 0x** in position **, ordinal not in range(128)
- 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
- ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
- for...in/for...of
- python解决 'ascii' codec can't decode byte 0xe5 in position 3: ordinal not in range(128)
- 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128
- 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128
- 【python】ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128)
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
- Extjs tree 实现父节点和子节点联动
- 交换两个变量而不用临时变量
- 利用SPAM打ABAP补丁
- Linux高负载下优化MYSQL
- 八款开源Android游戏引擎
- In java, range of byte : -128 ----- 127(for SCJP)
- VS2008 下安装 AjaxControlToolkit
- js jQuery mobile
- 量子基金
- I2C的Legacy model驱动
- [转]基于uda34x的ALSA声卡驱动之s3c24xx-pcm.c
- 窗体生命周期所响应的消息
- $.get( url, [data], [callback] )
- 生活感悟