在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以我们编写的程序最后都要转换成二进制。
1个字节8位(1Byte=8bit),一个字节为用8个0或1来表示(每个便是1bit)如:0110 0011
(大家都知道,开始的时候电脑是由老外搞出来的,那个时候不支持中文,后来加入中文编码,和其他语言的编码规则,所以造成编码后字节不同)在JAVA中,一个char是2个字节(byte),一个中文汉字是一个字符,2个字节(byte),而英文字母和数字字符是一个字节(byte)。所以char类型的内容有的时候是1个字节,有的时候是2个字节。int是4个字节,long是8个字节。
二进制整数分:无符号整数和有符号整数
无符号整数,如:
有符号整数,如:
有无符号的辨别:
存储的数字不区分有无符号,关键在于你要怎么去解析使用它。如果作为无符号,就是255,如果看成有符号就是-1。由人为的协议规定,在高级语言中由变量的类型来标识出。如果看成“有符号”整型,标志位是区分的标志。
原码,反码,补码:
无符号整数是没有原码反码补码概念的,只有当给定的值以有符号来使用时才有这一概念。
正数原码为十进制数的二进制值。
正数原码,反码,补码相同
负数原码为十进制数的二进制值,再在首位(符号位设置值为1)。
负数反码为原码除了符号位值不变其他为取反。
负数补码为负数反码加1。
如:
有符号的整数 原码 反码 补码
65 0100 0001 0100 0001 0100 0001
-65 1100 0001 1011 1110 1011 1111
在计算机中数值是以补码的形式存储的,可以理解为正数是以原码形式存储的,负数是以补码的形式存储的。
如:
65 计算机中存储(原码) 0100 0001 及十进制65 -->二进制值为:0100 0001
15 计算机中存储(原码) 0000 1111 及十进制15 -->二进制值为:0000 1111
-15 计算机中存储(补码) 1111 0010 及十进制-15 -->二进制值为:1000 1110
移位运算
移位运算符
包括:
“>> 右移,高位补符号位”;
“>>> 无符号右移,高位补0”;
“<< 左移”;
例子:
-5>>3=-1
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1111 1111
其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。
-5<<3=-40
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1101 1000
其结果与 -5*2*2*2 完全相同。
5>>3=0
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0000
其结果与 5/(2*2*2) 完全相同。
5<<3=40
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0010 1000
其结果与 5*2*2*2 完全相同。
-5>>>3=536870911
1111 1111 1111 1111 1111 1111 1111 1011
0001 1111 1111 1111 1111 1111 1111 1111
无论正数、负数,它们的右移、左移、无符号右移 32 位都是其本身,比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。
一个有趣的现象是,把 1 左移 31 位再右移 31 位,其结果为 -1。
0000 0000 0000 0000 0000 0000 0000 0001
1000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111
位逻辑运算符
包括:
& 与;
| 或;
~ 非(也叫做求反);
^ 异或
“& 与”、“| 或”、“~ 非”是基本逻辑运算,由此可以演变出“与非”、“或非”、“与或非”复合逻辑运算。“^ 异或”是一种特殊的逻辑运算,对它求反可以得到“同或”,所以“同或”逻辑也叫“异或非”逻辑。
例子:
5&3=1
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0001
-5&3=1
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0011
5|3=7
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0111
-5|3=-5
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1011
~5=-6
0000 0000 0000 0000 0000 0000 0000 0101
1111 1111 1111 1111 1111 1111 1111 1010
~-5=4
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0100
5^3=6
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0110
-5^3=-8
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1000
参考:
http://www.cnitblog.com/mantou/archive/2011/11/20/1239.html
http://eneasy.iteye.com/blog/182557