关于java数据类型byte的疑问,谢谢 byte 的数值范围是 -128~127 ,我做了下测试,看看超过范围会怎么样,结果却得到-125的结果,这结果是怎么算出来的呀,谢谢大家byte a=127,b=4;byte c= (byte) (a + b);System.out.print(c);输出结果:-125 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在(-128~127)范围,溢出后byte会从最小值-128开始存储,在-128的基础上再加上多出的数 JAVA中用2进制补码+1来表示负数:1 = 0000 0001 ~1 = 1111 1110 //补码 0000 0001 + (1)--------------------- 1111 1111 = -1 //补码 +1 得到 -1反之,我们可以从-1推出1-1 = 1111 1111~-1 = 0000 0000 // -1的补码 0000 0001 + (1)-------------------------- 0000 0001 = 1 // 补码+1 得到 1对比2个相反数的二进制码,可以发现其实是用二进制的高位为1来表示负数的符号,因为最高位如果为1就说明已经超出了(byte)的范围了 1000 0000 = 128(转为十进制是128,但在JAVA已经是-128了)(byte)= -128 to 127回到题目:0111 1111 = 1270000 0100 = 4 +------------------1000 0011 = 131 如果按照二进制转换十进制公式: 2^0 + 2^1 + 2^7 =131但在JAVA中,我们知道用高位来表示整型的符号,这是高位是1,所以在JAVA中表示的肯定的不是131(我们怎么判断高位呢? 如果是(byte),判断第8位,(short),判断第16位...类推)所以要用取补+1的方法来获得(1000 0011)的正数,后再判断它的负数1000 00110111 1100 //补码0000 0001 + (1)--------------0111 1101 = 125 (2^0 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6) = 125所以我们知道 1000 0011 = -125如果要说规律的话,就象1楼说的那样126 127 -128 -127 ..超过127的数,就表示最小的(byte)数也就是说1111 1111就是一个(byte)最大的负数-1 和 0000 0001 对应 ==============================SHORT分割线============================对于一个INT型:1 = 0000 0000 0000 0001-1 = 1111 1111 1111 1111 最高位为1(红色)就说明它表示的是负数byte a = 127,b = 3;short c;c = a + b;System.out.println(c); //output is 131 (0000 0000 1000 0011) 最高位不是1不知道我解释清楚了没 求助一个JAVA作业题啊。。。各位大哥大姐帮帮忙~~~ 用java编一个局域网的桌面程序,怎么编写客户端和服务器程序,怎么控制IP的设置,有相关方面经验的人帮忙谈谈 关于如何获取bt的连接数和种子数的问题. 如果用输出流想文件追加内容 求助一个java程序 swt中弹出菜单复选框的问题 打包后如何读取包中的文件 在线等急 谁能详细介绍 JVM ?? ●●●●●●applet打包后该如何引用●●●●●● 音乐播放器的问题 求高手指点!!!不知道咋回事 struts2里面对日期时间的格式化问题
~1 = 1111 1110 //补码
0000 0001 + (1)
---------------------
1111 1111 = -1 //补码 +1 得到 -1反之,我们可以从-1推出1
-1 = 1111 1111
~-1 = 0000 0000 // -1的补码
0000 0001 + (1)
--------------------------
0000 0001 = 1 // 补码+1 得到 1对比2个相反数的二进制码,可以发现其实是用二进制的高位为1来表示负数的符号,因为最高位如果为1就说明已经超出了(byte)的范围了 1000 0000 = 128(转为十进制是128,但在JAVA已经是-128了)
(byte)= -128 to 127回到题目:
0111 1111 = 127
0000 0100 = 4 +
------------------
1000 0011 = 131 如果按照二进制转换十进制公式: 2^0 + 2^1 + 2^7 =131但在JAVA中,我们知道用高位来表示整型的符号,这是高位是1,所以在JAVA中表示的肯定的不是131
(我们怎么判断高位呢? 如果是(byte),判断第8位,(short),判断第16位...类推)所以要用取补+1的方法来获得(1000 0011)的正数,后再判断它的负数1000 00110111 1100 //补码
0000 0001 + (1)
--------------
0111 1101 = 125 (2^0 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6) = 125所以我们知道 1000 0011 = -125如果要说规律的话,就象1楼说的那样
126 127 -128 -127 ..超过127的数,就表示最小的(byte)数
也就是说
1111 1111就是一个(byte)最大的负数-1 和 0000 0001 对应
==============================SHORT分割线============================对于一个INT型:
1 = 0000 0000 0000 0001
-1 = 1111 1111 1111 1111 最高位为1(红色)就说明它表示的是负数byte a = 127,b = 3;
short c;
c = a + b;
System.out.println(c); //output is 131 (0000 0000 1000 0011) 最高位不是1
不知道我解释清楚了没