java二進制運算
⑴ java:關於java的二進制與運算,下面的過程是怎麼實現的呢
你是想判斷每一位是否是1對吧,其實你可以把&某種程度看成乘法(兩個二進制數對應的位相乘,都是1則為1,有一個為0就是0),如果你想判斷一個數的二進制哪個位置上是否是1,那麼你就選定那個位置為1的那個數和這個數&連接,如
你想判斷14第二位是否是1,只需用14和這10(3)這個二進制用&連接看是否等於0,想看第三位是否是1,就用14和100這個二進制數用&連接看結果是否是0
⑵ 請教java位運算問題
Java 位運算 Java 位運算[轉]一,Java 位運算1.表示方法: 在Java語言中,二進制數使用補碼表示,最高位為符號位,正數的符號位為0,負數為1。補碼的表示需要滿足如下要求。 (l)正數的最高位為0,其餘各位代表數值本身(二進制數)。 (2)對於負數,通過對該數絕對值的補碼按位取反,再對整個數加1。2.位運算符 位運算表達式由操作數和位運算符組成,實現對整數類型的二進制數進行位運算。位運算符可以分為邏輯運算符(包括~、&、|和^)及移位運算符(包括>>、>)。1)左移位運算符()則將運算符左邊的運算對象向右移動運算符右側指定的位數。「有符號」右移位運算符使用了「符號擴展」:若值為正,則在高位插入0;若值為負,則在高位插入1。3)Java也添加了一種「無符號」右移位運算符(>>>),它使用了「零擴展」:無論正負,都在高位插入0。這一運算符是C或C++沒有的。
⑶ 二進制相加 怎麼用java實現
兩個數相加,會得到一個結果,和一個進位的結果,
然後將這個進位的結果後面加0補位,然後再和這個結果相加。如此遞歸,知道進位全部是0為
public class $ {
public static void main(String[] args) {
String s0 = "100";// 十進制4
StringBuffer result = new StringBuffer();
StringBuffer jinwei = new StringBuffer();
System.out.println(test(result, jinwei, ));
}
private static String test(StringBuffer result, StringBuffer jinwei, String s0, String {
// 沒有進位了就退出
if (s0.length() > 0 && s0.indexOf("1") < 0) {
return s1;
}
//位數補齊
int len0 = s0.length();
int len1 = s1.length();
int minLen = Math.max(len0, len1);
s0 = buqi(len0, minLen) + s0;
s1 = buqi(len1, minLen) + s1;
for (int i = s0.length() - 1; i >= 0; i--) {
String str0 = s0.substring(i, i + 1);
String str1 = s1.substring(i, i + 1);
add(result, jinwei, str0, str1);
}
String tmpJinwei = jinwei.reverse().toString() + "0";
jinwei.delete(0, jinwei.length());
String tmpResult = result.reverse().toString();
result.delete(0, result.length());
return test(result, jinwei, tmpJinwei, tmpResult);
}
private static void add(StringBuffer result, StringBuffer jinwei, String str0, String str1) {
// 00相加為0,不進位
if ("0".equals(str0) && "0".equals(str1)) {
result.append("0");
jinwei.append("0");
return;
}
// 11相加為0,進位1
if ("1".equals(str0) && "1".equals(str1)) {
result.append("0");
jinwei.append("1");
return;
}
// 其他情況,相加為1,不進位
result.append("1");
jinwei.append("0");
}
private static String buqi(int len0, int minLen) {
String tmp = "";
for (int i = len0; i < minLen; i++) {
tmp += "0";
}
return tmp;
}
}
⑷ 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 得看被移數是正還是負。
如果還有什麼疑問,可以參考一下參考資料
希望我的回答對您有幫助,別忘了採納答案哦~
⑸ java中二進制怎麼表示
一、二進制的表示方法
有0,1組成。以0b開頭。
代碼的表示方法:
System.out.println(0b100)
二、不同進制的數據表現:
八進制:由0,1,....,7.以0開頭。
十進制:由0,1......,9.默認整數。
十六進制:由0,1,......9,a,b,c,d,e,f(大小寫均可)組成。
十進制:System.out.println(100);
八進制:System.out.println(0100);
十六進制: System.out.println(0x100);
(5)java二進制運算擴展閱讀
java 判斷二進制文件的代碼:
public static boolean isBinary(File file)
{
boolean isBinary = false;
try {
FileInputStream fin = new FileInputStream(file);
long len = file.length();
for (int j = 0; j < (int) len; j++) {
int t = fin.read();
if (t < 32 && t != 9 && t != 10 && t != 13) {
isBinary = true;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return isBinary;
}
⑹ 跪求「java中二進制怎麼表示」
java中二進制的表示:
1、Java中定義兩個數,然後分別列印出它們的二進製表示(例如7和-7):
System.out.println("Java二進制7:"+Integer.toBinaryString(7));
System.out.println("Java二進制-7:"+Integer.toBinaryString(-7));
輸出:
Java二進制7: 111
Java二進制-7:
7的二進制就是111
-7轉化二進制的過程:
(1)把-7轉化成7,二進制是 111
(2)Java中對於不滿32位的int二進制自動補齊,所以變成了 (29個0)111
(3)然後取反 (29個1)000
(4)然後加1 (29個1)001
(6)java二進制運算擴展閱讀:
c語言中二進制的轉換:
用函數轉換itoa(值,數組名,進制)
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
char str[8];
inti=8;
itoa(i,str,2);
printf("%s",str);
}
⑺ Java:二進制位運算時兩個數都是補碼嗎
二進制數 & 二進制數,這種運算,是按照一位數、一位數、...,相與的。
是不是補碼,並沒有關系。
是不是補碼,都是這樣算。
⑻ java的數字二進制輸出
首先,java里int是有32位2進制數組成的
我們一般賦值
int
i
=
1;
這個是賦值10進制的數
賦值
2進制要
int
i
=
01;(前面加個0,就表示是2進制數)
賦值16進制(常用)
int
i
=
0x00000001;
(0x表示為16進制數)
3種的值都是1.
要用2進制輸出就是Integer.toBinaryString(i)
拓展:
因為計算機處理位運算速度是非常快的(應該是最快的運算)
所以很多時候,如果有一堆boolean變數需要表示時,
一般只用1個int的數表示,如:
int
i
=
0x0000000f;//表示後4位為1
int
m
=
(i
>>
2)
&
1;
//
其中m就是表示某一位的值,2表示右邊開始數第2位(當然是從第0位開始算的)
這樣就能取具體每一位的值
這種方法在很吃代碼效率的程序中經常遇到
全手打,望支持
⑼ java中如何將十進制數字轉化成二進制
如果表達小於2^31-1的正數代碼如下:
public void binaryToDecimal(int n){
int t = 0; //用來記錄位數
int bin = 0; //用來記錄最後的二進制數
int r = 0; //用來存儲余數
while(n != 0){
r = n % 2;
n = n / 2;
bin += r * Math().pow(10,t);
t++;
}
System.out.println(bin);
}
使用字元串的拼接(+)來實現大於2^31-1的數,代碼如下:
public void binaryToDecimal(int n){
String str = "";
while(n!=0){
str = n%2+str;
n = n/2;
}
System.out.println(str);
}
可以右移後再與0x01進行&運算得到第一位的數字判斷判斷它的第幾位上是0,第幾位上是1,代碼如下:
class ByteMove
{
public static void main(String[] args)
{
int i = 7;
move(i);
}
static void move(int num){
for(int i= 0;i<6;i++){
System.out.println("第"+(i+1)+"位:" + (num >> i & 0x01));
}
}
}
⑽ Java:二進制的按位與操作怎麼做求助大神!
//先用鏈接中的方法,把String a,b 分別轉換成byte[]數組data_a和data_b
byte[] data_a=hex2byte(a);
byte[] data_b=hex2byte(b);
byte[] data_c=new byte[a.length]; //結果串
//逐個直接進行位與運算 ()
for(int i=0;i
追問:
謝謝!^是按位異或么?PHP中的^和Java^不同是么?
並且出現了以下問題:(前面兩個都OK,損失精度那個是怎麼回事啊?強制轉換會有問題么)
追答:
1、^符號是異或。
2、代碼中需要把你命題中的a、b的定義和數據抄上,能避免「找不到符號」。
3、a.length更正小寫
4、損失精度是提示並非錯誤。由位運算之後精度變成32bit。可以明示為8bit。
data_c[i]=data_a[i]&data_b[i];
改
data_c[i]=(byte)(data_a[i]&data_b[i]);
評論
0
0
載入更多