声明:本文来源于个人网络阅读理解、摘抄、整理,作为查询复习工具,如有错漏,恭请指正
位、字节、字是计算机数据存储的单位。
位是最小的存储单位,每一个位存储一个1位的二进制码。
一个字节8位。
字通常为16、32或64个位组成。
机器数
一个数在计算机中的二进制表示形式,叫做这个数的机器数。
机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1
机器数的真值
最高位看正负,余下算数值,数值为机器数真值
java基本数据类型
type | length | signed |
---|---|---|
boolean | 1bit | |
byte | 8bit | |
char | 2byte | 没有负数 |
short | 2byte | |
int | 4byte | |
long | 8byte | |
float | 4byte | |
double | 8byte |
Java的原始类型里没有无符号类型,如果需要某个宽度的无符号类型,可以用>>>,这个是java的无符号右移操作符
char类型采用UTF-16编码,无所谓有无符号,在Java编程中强烈建议不要使用char类型
原码
符号位+真值
反码
正数的反码是其本身;
负数的反码就是原码符号位除外,其他位按位取反;
补码
正数的补码就是其本身;
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)
正数: 原码 = 反码 = 补码
负数: 补码 = 反码 + 1
<< 表示左移
计算步骤
1、转换为二进制
2、换算为补码
3、补码进行相应的位移操作得到结果补码
?正负均低位补0
4、补码转换为原码
5、进制换算为结果
相同真值的正负数 左移后的结果真值也相同
16 << 2 补码左移2位 低位补0
0001 0000 -> 0100 0000 = 1x 2^6 = 64
-16 << 2 补码左移2位 低位补0
反码 1001 0000 -> 1110 1111
补码 1110 1111 -> 1111 0000
左移后的补码 1111 0000 -> 1100 0000
左移后的反码 1100 0000 -> 1011 1111
左移后的原码 1011 1111 -> 1100 0000 = - 1x2^6= -64
>> 表示右移
16 >> 2 补码右移2位 高位补0
0001 0000 -> 0000 0100 = 1x 2^2 = 4
-16 << 2 补码右移2位 高位补1
反码 1001 0000 -> 1110 1111
补码 1110 1111 -> 1111 0000
右移后的补码 1111 0000 -> 1111 1100
右移后的反码 1111 1100 -> 1111 1011
右移后的原码 1111 1011 -> 1000 0100 = - 1x2^2= -4
计算步骤
1、转换为二进制
2、换算为补码
3、补码进行相应的位移操作得到结果补码
?正:高位补0
?负:高位补1
4、补码转换为原码
5、进制换算为结果
相同真值的正负数 右移后的结果真值也是相同的
>>> 无符号右移
正负右移均补0
正数同>>
负数
-16 >>> 2
32位原码:1000 0000 0000 0000 0000 0000 0001 0000
反码:1111 1111 1111 1111 1111 1111 1110 1111
补码:1111 1111 1111 1111 1111 1111 1111 0000
补码右移2位:0011 1111 1111 1111 1111 1111 1111 1100
补码为正 补码=反码=原码
结果:Integer.valueOf("00111111111111111111111111111100",2)=1073741820
& 按位与
两位全为1,结果才为1
0&0=0;0&1=0;1&0=0;1&1=1
例如:51&5 即0011 0011 & 0000 0101 =0000 0001 因此51&5=1.
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。
(2)取一个数中指定位。
例如:设X=10101110,取X的低四位,用X&0000 1111=0000 1110即可得到。
方法:找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与x进行“与运算”可以得到x中的指定位
| 按位或
只要有一个为1,结果就为1。
0|0=0; 0|1=1;1|0=1;1|1=1;
例如:51|5 即0011 0011 | 0000 0101 =0011 0111 因此51|5=55
特殊用法
常用来对一个数据的某些位置1。
方法:找到一个数,对应x要置1的位,该数的对应位为1,其余位为零。此数与x相或可使x中的某些位置1。
原文:https://www.cnblogs.com/liusheng-666/p/14246775.html