本文目錄一覽:
java中按位取反運算的詳解
按位取反就是每一位都取反,所謂取反就是1變0,0變1
比如樓主說的10
二進位表示就是00000000
00000000
00000000
00001010
取反後就是11111111
11111111
11111111
11110101
這在十進位中就是-11
而他的二進位原碼錶示就是-1011
Java中取反是怎麼算的
5:00000101
取反:11111010
因為數在計算機里是用補碼形式存放的…所以要把11111010看做一段補碼
現在把補碼轉化為原碼,第一位是符號..不用變..先變成反碼..減1就可以..11111001
再變為原碼10000110,即-6
52
5:00000101
2:00000010
與就是各個位做與運算..
10=0
00=0
11=1
結果就是00000000
關於JAVA 中取反問題
在2進位中,負數是以它正值的補碼形式表達
原碼:一個整數,按照絕對值大小轉換成的二進位數,稱為原碼。
比如
0000
0000
0000
0000
0000
0000
0000
0101是
5的
原碼。
反碼:將二進位數按位取反,所得的新二進位數稱為原二進位數的反碼。
取反操作指:原為1,得0;原為0,得1。(1變0;
0變1)
比如:將5的二進位表達式的每一位取反,得
1111
1111
1111
1111
1111
1111
1111
1010
稱:1111
1111
1111
1111
1111
1111
1111
1010
是
0000
0000
0000
0000
0000
0000
0000
0101
的反碼。
反碼是相互的,所以也可稱:
1111
1111
1111
1111
1111
1111
1111
1010
和
0000
0000
0000
0000
0000
0000
0000
0101
互為反碼。
補碼:反碼加1稱為補碼。
也就是說,要得到一個數的補碼,先得到反碼,然後將反碼加上1,所得數稱為補碼。
那麼,5的補碼為:
1111
1111
1111
1111
1111
1111
1111
1010
+
1
=
1111
1111
1111
1111
1111
1111
1111
1011
所以,-5
在計算機中的二進位表達為:
1111
1111
1111
1111
1111
1111
1111
1011
轉換為十六進位:0xFFFFFFFB。
====================================
明白了上面的就可以理解怎麼求
~i
了
int型儲存32個二進位位,~這個符號是按位取反,就是求i的反碼。
即得到1111
1111
1111
1111
1111
1111
1111
1010
上面這串二進位代表一個負數,將它轉換成int型過程如下:
1111
1111
1111
1111
1111
1111
1111
1010-1
=
1111
1111
1111
1111
1111
1111
1111
1001
再求反:
0000
0000
0000
0000
0000
0000
0000
0110
這個值就是5的按位取反所得到的int整數的絕對值(注意:5按位取反得到的是負數)
所以轉換為int型為:6
即:int型的i=5
取反後的結果為-6
原創文章,作者:LDUK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/143308.html