當前位置:首頁 » 編程語言 » java進制運算

java進制運算

發布時間: 2024-04-28 00:33:58

A. java中四個二進制位從操作符即(&按位與、|按位貨、^按位異或、~按位取反)

首先回答你問的問題:
按位與運算符(&)
參加運算的兩個數據,按二進制位進行「與」運算。

運算規則:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:兩位同時為「1」,結果才為「1」,否則為0

例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。

另,負數按補碼形式參加按位與運算。

「與運算」的特殊用途:

(1)清零。如果想將一個單元清零,即使其全部二進制位為0,只要與一個各位都為零的數值相與,結果為零。

(2)取一個數中指定位

方法:找一個數,對應X要取的位,該數的對應位為1,其餘位為零,此數與X進行「與運算」可以得到X中的指定位。

例:設X=10101110,

取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

還可用來取X的2、4、6位。

按位或運算符(|)
參加運算的兩個對象,按二進制位進行「或」運算。

運算規則:0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :參加運算的兩個對象只要有一個為1,其值為1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。

另,負數按補碼形式參加按位或運算。

「或運算」特殊作用:

(1)常用來對一個數據的某些位置1。

方法:找到一個數,對應X要置1的位,該數的對應位為1,其餘位為零。此數與X相或可使X中的某些位置1。

例:將X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

異或運算符(^)
參加運算的兩個數據,按二進制位進行「異或」運算。

運算規則:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:參加運算的兩個對象,如果兩個相應位為「異」(值不同),則該位結果為1,否則為0。

「異或運算」的特殊作用:

(1)使特定位翻轉找一個數,對應X要翻轉的各位,該數的對應位為1,其餘位為零,此數與X對應位異或即可。

例:X=10101110,使X低4位翻轉,用X ^ 0000 1111 = 1010 0001即可得到。

(2)與0相異或,保留原值 ,X ^ 0000 0000 = 1010 1110。

從上面的例題可以清楚的看到這一點。

取反運算符(~)
參加運算的一個數據,按二進制位進行「取反」運算。

運算規則:~1=0; ~0=1;

即:對一個二進制數按位取反,即將0變1,1變0。

使一個數的最低位為零,可以表示為:a&~1。

~1的值為1111111111111110,再按「與」運算,最低位一定為0。因為「~」運算符的優先順序比算術運算符、關系運算符、邏輯運算符和其他運算符都高。

然後在附送你兩個為運算符的解釋:
左移運算符(<<)
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。

例:a = a << 2 將a的二進制位左移2位,右補0,

左移1位後a = a * 2;
若左移時舍棄的高位不包含1,則每左移一位,相當於該數乘以2。

右移運算符(>>)
將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

操作數每右移一位,相當於該數除以2。

例如:a = a >> 2 將a的二進制位右移2位,

左補0 or 補1 得看被移數是正還是負。

如果還有什麼疑問,可以參考一下參考資料

希望我的回答對您有幫助,別忘了採納答案哦~

B. Java里的十二進制,六進制,二進制,分別怎麼轉換

轉換為2的幾何級數倍進制比較容易,其他的就不方便了。
先說和10進制的轉換:
倒序將2進制數編冪數,例如10101010從後向前冪數依次為7654321,所以它轉換為10進制就是1*2^7+0*2^6+1*2^5+0^2^4+1*2^3+0^2^2+1^2^1+0^2^0=170,這種演算法適用於將任意進制轉換為10進制,只要將底數替換即可。

下面說2的幾何級數倍的演算法:
一般就是將2進制按2的級數進行分段,比方說8進制(8是2的3次方),將2進制分為每3位一段進行轉換,每段單獨按十進制轉換即可。
10101010,分為10|101|010,然後每段進行單獨轉換,10轉換後為2,101轉換後為5,010轉換後為2,所以10101010(2)=252(8)。

其他進制一般演算法就是先將2進制轉換為10進制,再用短除法轉換為其他進制,短除法我記不清怎麼個演算法了,並不是算公約數之類的那個短除法,借位演算法比較特殊,只不過最後余數作為最後一位。
例如170(10)進制就使用170=332(7)

C. java中異或是怎樣算的

概述

i = 14,異或演算法轉換二進制,同則取0異則取1;

解析

異或是一種基於二進制的位運算,用符號XOR或者^表示,其運演算法則是對運算符兩側數的每一個進制位同值則取0,異值則取1.

簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.

For example:

3^5 = 6

轉成二進制後就是 0011 ^ 0101 二號位和三號位都是異值取1 末尾兩個1同值取零,所以3^5 = 0110 = 6

而 i = 50 ,j = 60;

所以:

i 的二進制 = 00110010

j 的二進制 = 00111100

同位相同取0,不同取1所以得出來的值為00001110

i = i ^ j;所以i = 00001110 = 14


拓展內容

異或運算符

性質

1、交換律
2、結合律(即(a^b)^c == a^(b^c))
3、對於任何數x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A

異或運算最常見於多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算後仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變數的值,必須要引入一個中間變數。但如果使用異或,就可以節約一個變數的存儲空間: 設有A,B兩個變數,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :
A=A XOR B (a XOR b)
B=B XOR A (b XOR a XOR b = a)
A=A XOR B (a XOR b XOR a = b)

#code:

D. java 十進制轉二進制!

十進制數轉二進制數的演算法如下:
1. 十進制整數轉換為二進制整數

十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余
數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。
2.十進制小數轉換為二進制小數

十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又
得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。然後把取出的整數部分按順序排列起來,先取的整數作為
二進制小數的高位有效位,後取的整數作為低位有效位。

下面就給出根據十進制數轉二進制數的演算法所寫的一段Java程序以供大家參考:

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) {
Test t = new Test();
double d = 8;
String s = t.decimal2BinaryStr(d);
System.out.println("十進制數"+d+"轉成二進制數為:"+s);
}

/**
* 十進制數轉二進制數
* @param d 十進制數
* @return 十進制數轉換成二進制的字元串
*/
public String decimal2BinaryStr(double d){
String result = decimal2BinaryStr_Inte(d);
result += decimal2BinaryStr_Deci(d);
return result;
}

/**
* 十進制整數部分轉二進制數
* @param d 十進制數
* @return 十進制整數部分轉換成二進制的字元串
*/
public String decimal2BinaryStr_Inte(double d){
// return Integer.toBinaryString((int)d);
/*
* 本來利用上面的Integer.toBinaryString(int)就可以得到整數部分的二進制結果,
* 但為了展示十進制轉二進制的演算法,現選擇以下程序來進行轉換
*/
String result = "";
long inte = (long)d;
int index = 0;
while(true){
result += inte%2;
inte = inte/2;
index++;
if(index%4 == 0){
result+=" ";
}
if(inte==0){
while(index%4!=0){
result+="0";
index++;
}
break;
}
}
char[] c = result.toCharArray();
char[] cc = new char[c.length];
for(int i=c.length; i>0; i--){
cc[cc.length-i] = c[i-1];
}
return new String(cc);
}

/**
* 十進制小數部分轉二進制
* @param d 十進制數
* @return 十進制小數部分轉換成二進制小數的字元串
*/
public String decimal2BinaryStr_Deci(double d){
return decimal2BinaryStr_Deci(d, 0);
}

/**
* 十進制小數部分轉二進制
* @param d 十進制數
* @param scale 小數部分精確的位數
* @return 十進制小數部分轉換成二進制小數的字元串
*/
public String decimal2BinaryStr_Deci(double d, int scale){
double deci = sub(d,(long)d);
if(deci==0){
return "";
}
//為了防止程序因所轉換的數據轉換後的結果是一個無限循環的二進制小數,因此給其一個默認的精確度
if(scale==0){
scale = (String.valueOf(deci).length()-2)*4;
}
int index = 0;
StringBuilder inteStr = new StringBuilder();
double tempD = 0.d;
while(true){
if(deci==0 || index==scale){
while(index%4!=0){
inteStr.append("0");
index++;
}
break;
}
if(index==0){
inteStr.append(".");
}
tempD = deci*2;
inteStr.append((int)tempD);
deci = sub(tempD ,(int)tempD);
index++;
if(index%4 == 0){
inteStr.append(" ");
}
}
return inteStr.toString();
}

/**
* 提供精確的減法運算。
* @param v1 被減數
* @param v2 減數
* @return 兩個參數的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
}
例如將十進制數1234.5轉成二進制數為:0100 1101 0010.1000

熱點內容
sql精簡版64 發布:2024-11-28 03:36:28 瀏覽:72
金立怎麼加密圖片 發布:2024-11-28 03:31:43 瀏覽:663
2017玩dnf電腦什麼配置 發布:2024-11-28 03:30:56 瀏覽:519
ftp掛載存儲ip配置 發布:2024-11-28 03:28:51 瀏覽:962
山耐斯空壓機密碼多少 發布:2024-11-28 03:26:28 瀏覽:404
安卓拍照搖一搖是什麼軟體 發布:2024-11-28 03:26:27 瀏覽:256
小米2s存儲卡 發布:2024-11-28 03:15:49 瀏覽:648
彈性演算法 發布:2024-11-28 02:58:40 瀏覽:85
python寫入mysql資料庫 發布:2024-11-28 02:52:56 瀏覽:431
網站伺服器太忙怎麼進 發布:2024-11-28 02:47:39 瀏覽:719