java 数据类型转化,可能你没注意哦 byte i=1; i+=1234; System.out.println(i);打印出来是-45,为什么是这样啊?默认应该把1234转化成int,这样会编译不通过,那为什么不报错呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把你这句代码:i+=1234; 改为:i = i + 1234; 这样就会报错了! 楼上讲了为什么不报错如果你还想知道为什么是-45 ,就理解下补码与反码(btye)1234 = -46; 你知道(btye)1234 为什么是-46 吗你可以把1234 转换成二进制100 1101 0010byte 只有八位,长的转换成短的会丢失精度,即得到1101 0010高位为符号位,1 表示负 0 表示正,负转换要取反码+1反码:00101101 +1 :0010111000101110 = 46因为高位是负所以得出 结果 1234 为-46 娃,有意思。其实怎么理解都行。1,1234为int,先把i转int,再把结果专为byte,也就是取了结果那个int数(1235)的低八位,当补码解析,就是-45(11010011);2,这个运算符直接将后面的int数转为了byte,也就是取了1234的低八位(11010010),再加一,结果做补码解析,仍然-45;至于jvm到底是那种工作机制就不知道了哦,反正向下转型就会造成数据丢失,甚至出错。 如何在Tomcat中查看对应的的JSP与Servlet版本 又是jfreechart乱码~ 关于LOG4j配置文件存放的路径 关于环境变量的问题。 请教高手,如果数据表没有主键,用CMP如何作呀,为什么总出错呀!! 寻找支持eclipse3m9的myeclipse版本 关于jboss 斑竹,前辈们帮帮忙看看吧! JB开发EJB一定要有borland application server吗??? EJB中事务的控制 在线求助js级联 ssh2框架的使用问题!
就理解下补码与反码(btye)1234 = -46;
100 1101 0010
byte 只有八位,长的转换成短的会丢失精度,
即得到1101 0010
高位为符号位,1 表示负 0 表示正,负转换要取反码+1
反码:00101101
+1 :00101110
00101110 = 46因为高位是负所以得出 结果 1234 为-46
其实怎么理解都行。
1,1234为int,先把i转int,再把结果专为byte,也就是取了结果那个int数(1235)的低八位,当补码解析,就是-45(11010011);
2,这个运算符直接将后面的int数转为了byte,也就是取了1234的低八位(11010010),再加一,结果做补码解析,仍然-45;
至于jvm到底是那种工作机制就不知道了哦,反正向下转型就会造成数据丢失,甚至出错。