當前位置:首頁 » 編程語言 » java反碼

java反碼

發布時間: 2022-05-17 09:28:17

A. 原碼,反碼,補碼詳解及 java中和的區別

反碼即原碼是0的時候換成1,1換成0,補碼在反碼基礎上最後一位加1,可以進位

B. Java中取反是怎麼算的

5:00000101
取反:11111010
因為數在計算機里是用補碼形式存放的...所以要把11111010看做一段補碼
現在把補碼轉化為原碼,第一位是符號..不用變..先變成反碼..減1就可以..11111001
再變為原碼10000110,即-6
5&2
5:00000101
2:00000010
與就是各個位做與運算..
1&0=0
0&0=0
1&1=1
結果就是00000000

C. java中怎麼求一個正數和負數的反碼拿5和-5舉例,謝謝

System.out.println(Integer.toBinaryString(~5));
System.out.println(Integer.toBinaryString(~-5));

D. Java基礎,正數取反,各二進制碼按補碼各位取反;反碼取反,各二進制碼按補碼各位取反。

亂七八糟。按專業角度說,為了解決把二進制整數減法(或負數運算)轉換成加法來算的問題(所以你只聽過累加器,而沒有累減器),就發明了原碼,反碼,補碼。比如一個-2,假設它是八位長度的,原碼就是10000010,最高位1表示這是一個負數。反碼是11111101,就是除符號位以外把原碼各位都取反。補碼就是反碼加1,即11111110。正數2的補碼規定為自身,即00000010。現在把兩個數的補碼相加,11111110+00000010=100000000。前面我們已假設是在八位字長的環境下運算,現在算出了九位,這樣就溢出了,即在八位環境下看,第九位的1是不存在的,結果是00000000,即0。這和我們算2-2的結果是一樣的,這就實現了把減法轉為加法。另外,java還規定了幾個運算,把二進制數作與,或,非,異或,移位等運算,這些都與上面說的三種碼沒有直接關系,不要弄混了

E. java中二進制-11的源碼和反碼是多少

正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反
以8位為例
11 原碼為 0000 1011
-11 原碼為 1000 1011
-11 反碼為 1111 0100

F. java中按位取反 ~5=-6為什麼呀

首先要明確,取反是二進制操作
下面以5為例:
二進制原碼:0000
0000
0000
0000
0000
0000
0000
0101
取反操作後:1111
1111
1111
1111
1111
1111
1111
1010
而在Java中,有符號整數都是用補碼來表示,而補碼=反碼+1
1.先求反碼:1000
0000
0000
0000
0000
0000
0000
0101
2.再求補碼:1000
0000
0000
0000
0000
0000
0000
0110
最高位代表符號位
1
表示負數,0
表示正數
所以結果是-6

G. Java 取反運算符

用以下代碼可以實現你要求的功能:
long lang=64509;
String str1=Long.toBinaryString(lang);//將給定的數轉為二進制字串
String str2=Long.toBinaryString(~lang);//將給定的數取反轉為二進制字串
//將取反後的二進制串取最後的 長度與第一個串長度相等 的子串,這是我們需要的二進制串
String str=str2.substring(str2.length()-str1.length());
//將它轉換為十進制整數
int i=Integer.parseInt(str, 2);
System.out.println(i);

具體理論知識如下所示:
先要理解一些概念:
在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

H. JAVA 中的 -> 是什麼意思

本文主要是講解 Java 中的運算符。對於運算符而言是編程參與計算的基礎核心內容。最基礎的加減乘除取余。到後面的邏輯運算大於小於等於不等於。



本文內容思維導圖



先從最簡單的算術運算符說起。



算術運算符



算術運算符又分為: 一元運算符和二元運算符, 並且在 Java 中包含三元運算符, 就是條件運算符或者叫作三目運算符只是名字不同,含義相同。



一元運算符



一元運算符只有一個變數就可以進行操作。常用的一元運算符就是自加,自減。一共四個一元運算符。



示例代碼, 這里使用 JShell 快速查看結果。



需要注意其中的自加和自減的規則。當運算符在前的時候 ++ a; 運算符的優先順序比較高, 所以會先處理這個代碼, 所以可以看到代碼裡面直接返回了結果 4。但是 a ++ 的時候卻沒有直接返回結果, 因為他的運算符比價低。 所以重新調用該變數就會列印出來當前的值。



代碼定義如下:



運行查看結果:



二元運算符



二元運算符一共5個。分辨是加減乘除取余(+、-、*、/、%)。



其中,在進行除法運算的時候,遵守除數不能為 0;



如果除數為 0 就會報錯, 錯誤如下:



代碼示例如下:



運行查看結果,編譯, 運行:



賦值運算符



對於賦值運算符基本上貫穿了整個類的周期。常用的 = 賦值。 和簡寫賦值和算術運算符的使用方式。賦值運算符有如下圖所示的使用方式。



使用 JShell 進行測試代碼如下:



代碼示例如下:



inta=0;
a=3;
System.out.println(a);// 3
a+=3;
System.out.println(a);// 6
a-=3;
System.out.println(a);// 3
a*=3;
System.out.println(a);// 9
a/=3;
System.out.println(a);// 3
a%=2;
System.out.println(a);// 1



比較運算符



比較運算符, 也可以說是布爾運算符。 主要是比較兩個表達式的結果。 (表達式) 操作符 (表達式)



根據上面的運算符進行案例演示, 一定要動手練習。 更能加深印象。



只要知道比較運算是最終得到一個布爾類型的值。並且在進行比較運算的時候, 一定要注意其優先順序。代碼這次自己動手做吧。 有上面的演示, 應該很容易就搞定。



邏輯運算符



對於邏輯運算符, 主要就是 3 個。 邏輯與、邏輯或、邏輯非。和數學中的與或非意思一致。



格式: 表達式1 邏輯運算符 表達式2



邏輯運算符大多數情況下會和其他的運算符一起使用, 主要做一些簡單或復雜的邏輯運算。 並且通常都是和 if, for 等邏輯表達式一起使用。



簡單的說一說, 對於邏輯與和邏輯或不同點。 邏輯與為第一個表達式和第二個表達式都等於真值的情況下才會表達式成立。 邏輯或是第一個表達式為真值的情況下, 就不會在執行第二個表達式。 因為不管第二個表達式是否成立, 該邏輯運算都是真值了。



位運算符



對於任何編程語言而言, 最終的操作都是二進製表示, 因為計算機只認識二進制, 而八進制,十進制或者十六進制都是為了讓開發人員方便開發。對於 Java 來說, 也可以針對數的某個值進行運算。這就需要位運算符的參與了。也是為了方便對二進制進行操作。



位運算符主要有一下運算符:



位與 &



按位與和邏輯運算符的邏輯與很類似,一個比較的表達式, 一個是按照位來進行判斷。在二進制中, 位與的判斷為都為 1 的記做 1 否則記做 0。



按位與規則如下:



0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;



先看一個都是正整數的值 10 & 2。



最終得出結果 0000 1010 & 0000 0010 = 0000 0010 轉換成十進制就是2。



對於負值的位與運算有點區別的地方就是參與運算的是補碼。



舉例說明: 10 & -2



具體如何得到補碼, 可以參考我之前寫的文章基礎類型的相互轉換。這里對於負值的情況需要了解什麼是原碼,反碼和補碼。參與運算的是補碼。-2 的原碼是 1000 0010 反碼是 1111 1101 補碼 在反碼的基礎最後一位加 1 得到1111 1110。



最終結果得到 0000 1010 & 1111 1110 = 0000 1010 十進制也就是 10。



這個時候怎麼校驗結果是否正確呢? 直接寫 Java 代碼就好了, 打開 jshell:



位或 |



按位或, 和邏輯或很類似, 只要二者有一位 1 結果就是 1。



按位或規則如下:



0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;



根據上面的運算得到了 10 | 2 = 10。



負值有略有不同。



還是要靈活運用原碼反碼和補碼,特別是負數的情況下, 因為正數的原碼和補碼一致。



位反 ~



按位反, 和邏輯非類似。 是對位進行直接取反。



按位反規則如下:



~1 = 0;
~0 = 1;



先用 2 進行運算處理:



在進行 -2 的運算操作



-2 的原碼 需要轉換成補碼, 用補碼進行取反運算。 得到 1 的二進制。



代碼演示如下:



位異或 ^



位異或是基於二進制的位運算。 採用符號 XOR 在 Java 中使用 ^ 進行表示。兩個值相同取 0, 不同的取 1。



按位異或規則如下:



1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;



舉例 10 ^ 2



舉例 10 ^ -2



代碼演示結果的准確性:



異或在代碼優化和實際的工作中會經常用到。 後續實戰中用到了在詳細分析用法, 現在知道進行異或運算即可。



位左移 <<



將一個操作數進行二進制位往左移, 移動後空出來的低位用 0 進行填充。移除的高位捨去。高位丟棄,低位補零。



操作數 << 移動的位數



舉例說明 10 << 2



位左移代碼演示:



位右移 >>



將一個操作數進行二進制往右移, 移動後,有兩種情況,一種有無符號一種是有符號。也就是最高位為 0 移動後高位補 0, 如果最高位(符號位)為 1, 移動後空缺位都為 1.



操作數 >> 移動的位數



舉例說明 10 >> 2



對於負數舉例 -2 >> 2 空缺位補 1:



位右移代碼演示:



注意這兩者的區別。



無符號位右移 >>>



這個是和右移操作上是一致的, 但是不管是否最高位(符號位)為 1, 空缺位都使用 0 進行補齊。



操作數 >>> 移動的位數



舉例說明 10 >>> 2



對於負數來說。 這里有點區別, 因為對於負值來說, 上面其實都是 32 位, 為了讓大家看起來舒服轉換成了對應的 8 位的。 因為無符號位右移會改變正負值, 所以 32 位的負值和 8 位的負值是不一致的。



並且 Java 在處理 byte, short , char 等值進行移位操作前, 會先將類型轉換成 int 因為 int 佔用 32 位。



所以 -2 >>> 2 的時候,8 位運算應該是如下:



因為會先轉換成 32 位。 所以 32 位的 -2 等於如下:



也就是結果: 1073741823



無符號位右移代碼如下:



理解原理。 更能發現問題。



類型比較運算符



這里說的類型比較是對象的比較。 判斷每個定義的變數是否是某個類。該類可以是(介面、抽象類)。



語法規則:



boolean = 變數 instanceof 類



舉例說明:



運行查看結果:



這里需要注意:



  • null 值是沒有引用的, 所以和任何值都不相等。

  • instanceof 比較的是引用類型, 不能用於基礎類型的比較。

  • 條件(三目)運算符

    三目運算在 Java 中只有一個就是 ? :

    三目運算的語法格式:

  • `布爾表達式 ? 表達式1 : 表達式2`

  • 大部分情況下, 對於三目運算是 if 和 else 的簡寫。舉例說明:

  • inta=1;intb=2;

  • Stringmsg=a>b?"a 比 b 大":"a 比 b 小";

  • System.out.println(msg);


  • //上面的結果和下面一致

  • if(a>b){

  • msg="a 比 b 大!";

  • }else{

  • msg="a 比 b 小!";

  • }

  • //msg 是 "a 比 b 小!"
  • 運算符的優先順序

    所有的數學運算都是從左向右進行運算的, 對於 Java 來說大部分運算也是遵守從左向右的規則。 但是一元運算符,賦值運算符和三目運算符例外。他們是從右向左進行運算。

    運算符的內容告一段落, 接下來就是開始邏輯表達式的學習。 教程編寫不易。希望各位大看官點贊收藏加關注。更多內容大放送。

I. 關於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

J. java中-5的反碼是怎麼計算的 補碼呢

先轉換成二進制,就清晰了
11111011
逐位取位就是反碼
補碼就是和 & 0xff
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

熱點內容
python基礎語言 發布:2024-04-27 11:54:40 瀏覽:83
ioshttp伺服器搭建 發布:2024-04-27 11:40:26 瀏覽:912
忘記密碼如何強制刷機vivo 發布:2024-04-27 11:28:40 瀏覽:384
c語言讀取指定行 發布:2024-04-27 11:28:30 瀏覽:51
c語言中a10什麼意思 發布:2024-04-27 10:45:43 瀏覽:58
物聯網中ftp是什麼意思 發布:2024-04-27 10:41:17 瀏覽:986
銀行密碼保護在哪裡 發布:2024-04-27 10:25:23 瀏覽:189
tomcat源碼導入eclipse 發布:2024-04-27 10:25:15 瀏覽:194
android的api 發布:2024-04-27 10:23:39 瀏覽:683
官式訪問 發布:2024-04-27 10:04:00 瀏覽:522