6.9.2013 原码 反码 补码。

来源:互联网 发布:cloud outliner 知乎 编辑:程序博客网 时间:2024/05/16 04:10

近几天小雨绵绵。 一遇高考就下雨。。

好几天没看java了,在此表示要坚持。

今天遇到个问题:

         b=123456L;

         a=short(b); // 显式类型转换,强制类型转换

 结果 是-7616。

long为32位,short为16位  将long 转换为二制数  然后从右往左截取16位转换成十进制。

123456的二进制是:1111 0001 0010 00000

因为计算机中的数字都是补码表示的。 正数的原码 反码 补码 都相同。

负数的补码  是符号位不变 其他位取反 然后+1

1111  0001 0010 00000   的符号位为1 所以是负数。 其他位取反后为:1000 1110 1101 11111   然后+1为:1000 1110 1110 00000  最后取后边16位为:0001 1110 1110 00000

转换为十进制为7616 因为前边符号位是1 所以是-7616   (前三位是是0可以省略不要)。

 

short 范围 -32768 ~32767  123456 超出这个数了。在这个范围内还是原数  long范围2^64

 

continue. 当在循环体内遇见continue语句时,中断本次循环体的执行,立即执行下一次循环。

                continue语句与break语句不同,break语句是退出循环。continue语句是结束本次循环,不再执行continue语句后面的语句,直接继续下一次循环。

///////////////////////////////////////////////////

int a=123 ,b=321;

a=a^b;

b=a^b;

a=a^b:

 System.out.println("a=" + a + ", b=" + b);

a=321,b=123

^为位运算异或    原理是a^b为一个数c   b就等于c与原来的b异或结果为a, a就等于c与b(现在等于原来的a)异或结果为b。 以此达到交换内容的目的。  //异或过来再异或回去。

异或为位运算 转换成二进制

 

 

原创粉丝点击