java 移位運算子,取反運算子 >> >> ~ , java 負數補碼存放規則等同於機器儲存
移位運算程式碼如下:
package SimpleGrammar;
/**
*
* @author jaloli
*
* (1)負數儲存:java 等同於機器,都是用補碼存,補碼的規矩,
* 負數 -2 ,原碼為 10000000000000000000000000000010
* 補碼是符號位不變,各位取反+1,補碼為 11111111111111111111111111111110
*
* (2)負數移位:(說的是 >> << 移位符號,不是>>>,>> << 這種是帶符號移位) 兩種移位理解方式,
* 一種是原碼移位,再轉補碼,此時是符號位不變,左移右移都補0
* 另一種是補碼直接移位,右移補1,左移補0
* (3) >>移位方式與除法的區別: -2>>10 = -1,可看下面運算過程第二個printf,也就是和除法不同,
* 你右移多少位,也移不出0來,最多是-1,除法可以 -1 / 2 == 0
* (4) >>> 是不帶符號移位:1.只對64 位儲存的二進位制數有效.java int 是32 位(如下程式顯示),所以移位結果不是期待的數
* 2.移位:這個只有右移,無論正負數,統統右移不補0,移幾位,砍掉前多少位,10100>>>2 = 101,然後結果101按照正數來看
* >>> 作用存疑
* (5) ~ 取反:取反就是連同符號位一起取反,高位0 扔掉
*/
public class ShiftBit {
public static String printBinary(int number) {
return Integer.toBinaryString(number);
}
public static void main(String[] args) {
int oldValue = -20; //改成20 看,2,-2 試試
int shiftNum = 2;
//oldValue is : 11111111111111111111111111101100 原數為:-20
System.out.println("oldValue is : \t\t" + printBinary(oldValue) + "\t原數為:" + oldValue);
//oldValue >> 2 : 11111111111111111111111111111011 運算十進位制結果為: -5
System.out.println("oldValue >> 2 : \t" + printBinary(oldValue >> shiftNum) + " \t運算十進位制結果為: " + (oldValue >> shiftNum));
//oldValue << 2 : 11111111111111111111111110110000 運算十進位制結果為: -80
System.out.println("oldValue << 2 : \t" + printBinary(oldValue << shiftNum) + " \t運算十進位制結果為: " + (oldValue << shiftNum));
//oldValue >>> 2 : 111111111111111111111111111011 運算十進位制結果為: 1073741819 這個相當於把左邊的兩位砍掉了,沒補0,缺位了,移幾位缺幾位.1073741819 數按照無符號正數算出來的
System.out.println("oldValue >>> 2 : \t" + printBinary(oldValue >>> shiftNum) + " \t\t運算十進位制結果為: " + (oldValue >>> shiftNum));
//取反操作符,~-2
System.out.println("oldValue 取反 is : \t\t" + printBinary(~oldValue) + "\t原數為:" + oldValue);
}
}
相關文章
- Java中按位取反運算子Java
- Java 運算子Java
- Java運算子Java
- 位運算子之---按位取反運算子(簡單易懂)
- Java位運算子Java
- Java - 3 運算子Java
- Java的運算子Java
- C# ~按位取反運算子C#
- Java基礎09:邏輯運算子、位運算子Java
- == 運算子 - Java基礎Java
- Java算術運算子Java
- Java 基礎 之 算數運算子Java
- 【java提高】(17)---Java 位運算子Java
- 運算子 運算子
- JavaScript - 負號運算子JavaScript
- Java中包含哪些運算子Java
- java運算子(超詳細!!!)Java
- java基本語法--運算子Java
- [java基礎]之 運算子Java
- java零基礎自學第一天②,運算子:表示式,算術運算子,+操作,賦值運算子,自增自減運算子,關係運算子,邏輯運算子,三元運算子Java賦值
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- C++ 迭代器運算子 箭頭運算子->C++
- Java的左移和右移運算子Java
- java運算子優先順序Java
- Java學習筆記--運算子Java筆記
- 運算子-賦值運算子賦值
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- java從菜鳥到碼神之路——運算子Java
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- 算數運算子
- Java培訓教程:Java中的位移運算子!Java
- Java入門系列-06-運算子Java
- java運算子易錯點總結Java
- java小記-三元運算子Java
- Java入門--運算子和表示式Java
- Java運算子>>與>>>區別詳解Java
- Java運算子認識 (第四節)Java
- 如何利用~ & ^ | + 及移位運算子來實現 ! 的功能
- Java基礎語法:運算子、包機制、JavaDocJava