5、位运算符(7个):实例
生活随笔
收集整理的這篇文章主要介紹了
5、位运算符(7个):实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package day;
//5、位運算符(7個):實例
public class Test_10 {
public static void main(String[] args) {
// 【位移運算符(7個)之第1個】:? <<左移】? ? ? ? 移動N位就是乘以2的移動數次冪
System.out.println(12 << 2);// 1100 = 110000 = 32+16= 48
/*
* 3<<2? ?讀法:將3向左移動2位?
* 1.先把3的轉二進制:0011?
* 2.左移兩位0,右邊補齊兩個0:1100?
* 3.把二進制換十進制:
* 根據8421原則:(二進制1 對應8421下的值相加,只計算二進制1的值)??
* 1 1 0 0??
* 8 4 2 1?
* -------------
* 結果是:8+4=12,所以3<<2=12?
*?
* 3<<4? ?讀法:將3向左移動4位?
* 1.先把3的轉二進制:0011
* 2.左移兩位0,右邊補齊兩個0:0011 0000化為110000?
* 3.把二進制換十進制: 根據8421原則:(二進制1
* 對應8421下的值相加,只計算二進制1的值)? ? ?
* 1? ?1? 0 0 0 0? ?
* 32 16? 8 4 2 1
* --------------------------?
* 結果是:32+16=48,所以3<<4=48
*?
*/
// 【位移運算符(7個)之第2個:? >>右移】? ? ? 移動N位就是除以2的移動數次冪
System.out.println(5>>2);//5的二進制=101? ? 5/2(1) 2/2(0) 余數1(1)??
//101右邊=? ?01劃走,左邊是最高位是0,因此左邊補2個0? ? 0001,0001換成十進制是1 ,1/1=1? ??
System.out.println(-5>>2);
System.out.println("-16帶符號右移2:"+(-16>>2));
//16的二進制=10000,10000>>>2位=00 100=也就是100,100(根據8421,1x4=4)的二進制=4
//正的已知(16>>2)=4,加回負號,即(-16>>2)=-4
// 【位移運算符(7個)之第3個:? &按位與】
System.out.println(5&9);//5的二進制=0101,9的二進制=1001
//0101&1001= 0001 轉十進制=1? ? 根據&的Boolean原則:真真為真 有假必假 11=1;有0=0
// 【位移運算符(7個)之第4個:? |按位或】
System.out.println(5|9);//5的二進制=0101,9的二進制=1001
//0101|1001=1101轉十進制=8+4+1=13? ? 根據|的Boolean原則:假假為假 有真必真 00=0;有1=1
// 【位移運算符(7個)之第5個:? ~取反】(取反加1)-6+1=-7
System.out.println(~6);//6的二進制是110,2/6(0) 3/2(1) 余1
//~110? =001
// 【位移運算符(7個)之第6個:? ^按位異或】 一個數異或同一個數兩次,還是那個數
System.out.println(5^9);//5的二進制=0101,9的二進制=1001
//0101^1001= 1100=8+4=12? ? 根據^的Boolean原則:相同為假 不同為真
//^異或的特點: 一個數據對另一個數據位異或兩次 該數本身不變
System.out.println(7^4^4);
/*7^4^4=111^011^011=7
分解:
111^011= 100
100^011=111=7
------------------------------
System.out.println(5^10^10);
5^10^10=0101^1010^1010=5
分解:
0101^1010=1111
1111^1010=0101=5
----------------------------
System.out.println(5^10^5);
5^10^5=0101^1010^0101=10
分解:
0101^1010=1111
1111^0101=1010=10 */
// 【位移運算符(7個)之第7個:>>>:(無符號右移運算符)】
System.out.println("16無符號右移2:"+(16>>>2));
//16的二進制=10000,10000>>>2位=00 100=也就是100,100(根據8421,1x4=4)的二進制=4
System.out.println("-16無符號右移2:"+(-16>>>2));
} 與50位技術專家面對面20年技術見證,附贈技術全景圖
//5、位運算符(7個):實例
public class Test_10 {
public static void main(String[] args) {
// 【位移運算符(7個)之第1個】:? <<左移】? ? ? ? 移動N位就是乘以2的移動數次冪
//二進制轉十進制:8421原則(128? ? ?64? ? 32? ? 24? ? 16? ? 8? ? 4? ? 2? ? 1)
System.out.println(12 << 2);// 1100 = 110000 = 32+16= 48
/*
* 3<<2? ?讀法:將3向左移動2位?
* 1.先把3的轉二進制:0011?
* 2.左移兩位0,右邊補齊兩個0:1100?
* 3.把二進制換十進制:
* 根據8421原則:(二進制1 對應8421下的值相加,只計算二進制1的值)??
* 1 1 0 0??
* 8 4 2 1?
* -------------
* 結果是:8+4=12,所以3<<2=12?
*?
* 3<<4? ?讀法:將3向左移動4位?
* 1.先把3的轉二進制:0011
* 2.左移兩位0,右邊補齊兩個0:0011 0000化為110000?
* 3.把二進制換十進制: 根據8421原則:(二進制1
* 對應8421下的值相加,只計算二進制1的值)? ? ?
* 1? ?1? 0 0 0 0? ?
* 32 16? 8 4 2 1
* --------------------------?
* 結果是:32+16=48,所以3<<4=48
*?
*/
// 【位移運算符(7個)之第2個:? >>右移】? ? ? 移動N位就是除以2的移動數次冪
System.out.println(5>>2);//5的二進制=101? ? 5/2(1) 2/2(0) 余數1(1)??
//101右邊=? ?01劃走,左邊是最高位是0,因此左邊補2個0? ? 0001,0001換成十進制是1 ,1/1=1? ??
System.out.println(-5>>2);
System.out.println("-16帶符號右移2:"+(-16>>2));
//16的二進制=10000,10000>>>2位=00 100=也就是100,100(根據8421,1x4=4)的二進制=4
//正的已知(16>>2)=4,加回負號,即(-16>>2)=-4
// 【位移運算符(7個)之第3個:? &按位與】
System.out.println(5&9);//5的二進制=0101,9的二進制=1001
//0101&1001= 0001 轉十進制=1? ? 根據&的Boolean原則:真真為真 有假必假 11=1;有0=0
// 【位移運算符(7個)之第4個:? |按位或】
System.out.println(5|9);//5的二進制=0101,9的二進制=1001
//0101|1001=1101轉十進制=8+4+1=13? ? 根據|的Boolean原則:假假為假 有真必真 00=0;有1=1
// 【位移運算符(7個)之第5個:? ~取反】(取反加1)-6+1=-7
System.out.println(~6);//6的二進制是110,2/6(0) 3/2(1) 余1
//~110? =001
// 【位移運算符(7個)之第6個:? ^按位異或】 一個數異或同一個數兩次,還是那個數
System.out.println(5^9);//5的二進制=0101,9的二進制=1001
//0101^1001= 1100=8+4=12? ? 根據^的Boolean原則:相同為假 不同為真
//^異或的特點: 一個數據對另一個數據位異或兩次 該數本身不變
System.out.println(7^4^4);
/*7^4^4=111^011^011=7
分解:
111^011= 100
100^011=111=7
------------------------------
System.out.println(5^10^10);
5^10^10=0101^1010^1010=5
分解:
0101^1010=1111
1111^1010=0101=5
----------------------------
System.out.println(5^10^5);
5^10^5=0101^1010^0101=10
分解:
0101^1010=1111
1111^0101=1010=10 */
// 【位移運算符(7個)之第7個:>>>:(無符號右移運算符)】
System.out.println("16無符號右移2:"+(16>>>2));
//16的二進制=10000,10000>>>2位=00 100=也就是100,100(根據8421,1x4=4)的二進制=4
System.out.println("-16無符號右移2:"+(-16>>>2));
//-16無符號右移2:1073741820,為什么負的無符號右移這么大的?
百度答案:負數十進制轉二進制:換成二進制后? ?取反 加1
“ 0000 0101”在十進制中表示“5”,將這個二進制數(源碼)轉換為反碼就是
“1111 1010”而它的補碼就是在反碼的個位上加1為“1111 1011” 這個補碼的十進制數為“-5”
}} 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的5、位运算符(7个):实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 负数的十进制转二进制
- 下一篇: 4:如何实现对两个整数变量的值进行互换。