-------------计算机里面算法-----------

68 8*10的0次方+6*10的一次方

45 5*10的0次方+4*10的一次方

145 5*10的0次方+4*10的一次方+1*10的二次方

计算机中的2进制

01.原码
02.反码
03.补码



1G=1000MB

1G=1024MB


1 byte=8 bit;

0 0 0 0 0 0 0 0

1

0 0 0 0 0 0 0 1

-1

1 0 0 0 0 0 0 1


3

0 0 0 0 0 0 1 1



1+1
0 0 0 0 0 0 0 1
+ 0 0 0 0 0 0 0 1
-------------------
0 0 0 0 0 0 1 0 ==》2


-2+1
1 0 0 0 0 0 1 0 ==》原码 需要 转换成 反码
1 1 1 1 1 1 0 1 ==》 反码 需要 转换成 补码
1 1 1 1 1 1 1 0 ==》-2的补码
+0 0 0 0 0 0 0 1 ==》 1的补码
---------------------------------
1 1 1 1 1 1 1 1 结果是补码! 需要转换成反码 再转换成原码
1 1 1 1 1 1 1 0 ==》结果的反码
1 0 0 0 0 0 0 1 ==》 原码 -1

01.java中所有的数字都是有符号! 正 0 负 1
数字的最高位(最左边的)就是符号位!
02.正数的原码,反码,补码都是一样的!
03.负数的反码=符号位不变+其他位取反
04.负数的补码=反码+1
反码=补码-1
05.计算机在运行的过程中 都是以 《补码》 运算的!

java中的位运算

01.& :按位与 两位全为1,结果为1

2&3

运算过程:
0 0 0 0 0 0 1 0 ==》2的补码
& 0 0 0 0 0 0 1 1 ==》3的补码
---------------------------------
0 0 0 0 0 0 1 0 ==》 结果2

02.| :按位或 两位有一个为1,结果为1

2|3

运算过程:
0 0 0 0 0 0 1 0 ==》2的补码
| 0 0 0 0 0 0 1 1 ==》3的补码
---------------------------------
0 0 0 0 0 0 1 1 ==》 结果3

03.~ :按位取反 :所有的0变成1,所有的1变成0 (仅限于一个表达式使用)

~3
0 0 0 0 0 0 1 1 ==》3的补码
~
---------------------------------
1 1 1 1 1 1 0 0 负数 这是原码
1 0 0 0 0 0 1 1 反码

1 0 0 0 0 1 0 0 补码

~-5

1 0 0 0 0 1 0 1 ==》 -5的源码
1 1 1 1 1 0 1 0 ==》 -5的反码
1 1 1 1 1 0 1 1 ==》-5的补码
~
----------------------------------
0 0 0 0 0 1 0 0 ==》 4

04. ^ :按位异或 两位一个是1一个是0,结果才是1

2^3
0 0 0 0 0 0 1 0
^ 0 0 0 0 0 0 1 1
-----------------------------
0 0 0 0 0 0 0 1 ==>!



算术右移:符号位不变 ,低位溢出

10 >> 2

0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0
--------------------------------
0 0 0 0 0 0 1 0

算术右移:符号位不变 ,低位补0
2 << 2

0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0
---------------------------
0 0 0 0 1 0 0 0 ==》2的三次方


逻辑右移 没有左移
>>> 低位溢出,高位补0
2 >>> 2
0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0
-------------------------
0 0 0 0 0 0 0 0


int a = 5;
int b = 4;

if ((b++ == a) & (b++ == a)) {
System.out.println(b);
} else {
System.out.println(b + "aaaa");
}

原文地址:https://www.cnblogs.com/laosunlaiye/p/7566963.html