本文目錄一覽:
java 位移運算
首先要執行移位操作。。必須將byte轉換成int。。。
bt的二進位表示為1000 0001
轉換成int後二進位表示為 11111111 11111111 11111111 1000 0001
先執行b3,右移三位變為:11111111 11111111 11111111 1111 0000
再執行b3,左移三位變為: 1111111 11111111 11111111 1000 0000
bt 是byte類型。。所以再截斷。。。取1000 0000
第一位是符號位,1表示負數。。。所以結果就是-128(2的七次方)
同樣的分析方法。。。。
先表示成int的二進位反碼錶示方式。。。
11111111 11111111 11111111 1101 0000
右移三位變成:1111111 1111111 1111111 1111 1010
左移三位變成:11111111 11111111 11111111 1101 0000
截斷變成 1101 000
這個反碼錶示就是-48
希望能幫到你~!
java如何用移位符將一個數字加32?
只通過位移符無法得到結果,因為位移符向左每位移一位相當於乘以2,向左位移5位相當於乘以2×2×2×2×2=32,所以十進位數字1向左位移5為可以得到1×32=32。其本質是十進位數的1轉換為二進位數後為0000 0001,其向左位移5位後為0010 0000,轉換為十進位數就是32。
位移相當於乘法,所以我們無法只通過位移符使一個數加32,那麼就這樣吧:
運行結果:
1 5 = 32,所以1 + 1 5 = 33, 2 + 1 5 = 34, 3 + 1 5 = 35。
java位移運算符有什麼意義
給你舉個例子,乘除法可以使用位運算,速度更快。很多底層的東西是用位運算去實現的,你去看看java的很多源碼,還有IO流的處理有時候會用位運算,二進位文件的讀寫解析等都需要位運算,如果你了解底層的東西,你會位運算,這回讓你的程序生涯更加精彩,望採納,謝謝
java位移問題
移位操作:
左移:向左移位,符號後面的數字是移了多少位,移的位用0補齊,例如2進位數01111111左移一位後變為11111110,移位是位元組操作。
右移:向右移位,符號後面的數字是移了多少位,移的位用符號位補齊,例如01111111右移一位後變為00111111,而10000000右移一位後變成11000000,因為符號位是1。
你的例題num用2進位表示為1111 1111 1111 1111 1111 1111 1110,向左移了4次位就變成1111 1111 1111 1111 1111 1110 0000。十分簡單
獎勵就不用了。
0x代表16進位,0xFFFFFFE就是一個十六進位的數,化成2進位的數就是:
1111 1111 1111 1111 1111 1111 1110,這個數太大了,化成十進位就是:16的7次方減2。
移位都是在2進位下做的操作,硬體的實現也很簡單,向左移其實就是把每一個2進位位都向左移1位,這樣不就像10進位的數乘了個十么。比如11左移一位就是110,但是本來存這個數的內存只有兩位,現在多了一位,那就舍唄,於是就變成10了。你這個數大,但是道理是一樣的。
右移稍複雜點,還舉個簡單的例子,11向右移一位,11還可以看成啥呢,就是011.0,於是右移一位就是,01.10,舍掉小數不就是01了。但是這是錯的,就是符號位的問題,計算機死規定最高位是符號位,也又做了一個死規定,就是11不能看成011.0,11前面的位必須看成和符號位一樣的數,也就是看成111.0,那右移一位不就是11.10,捨去小數就變成11了,如果是01,就看成001.0,右移一位就變成00.10,於是就是00。關鍵是符號位,也就是最高位,最高位是1,右移就把最高位補1,如果最高位是0,右移就把最高位補0。死規定,就得記。
右移就是這點麻煩,左移挺簡單。
你這個數最高位是1,所以右移就補1,但是你給的例子是左移的(箭頭指的方向),所以不用想那麼多,移了4位就是這麼個樣子,不用再多說了吧,應該理解了,要還不懂就說哪不懂。
抱歉哦,馬虎了,int型變數是4位元組,所以0xffffffe由於不到4位元組,所以前面用0補齊,也就是0x0ffffffe,這是4個位元組.
左移1位一次:0x1fffffffc
左移1位兩次:0x3fffffff8
左移1位三次:0x7fffffff0
左移1位四次:0xfffffffe0
這樣就沒問題了。
java int怎麼位移取前幾位數字?
思路:直接用Integer類的bit運算操作。
如果想得到一個n位數的第k位,寫法如下:
(n ( 1 k )) k
內部實現就是:
1、創建一個mask,把1左移k位
int mask = 1 k;
2、然後把n右移mask位就是想要得到的結果
int masked_n = n mask;
int thebit = masked_n k。
class Tester{
public static void main (String[] args) {
String str = “2013年6月12日,XXXXXXXXXXXXX”;
String reg = “([^,,]+)[,,].*$”;
String r = str.replaceAll(reg, “$1”);
reg = “^((\\d+)年)?((\\d+)月)?((\\d+)日)?$”;
String sy = r.replaceAll(reg,”$2″);
String sm = r.replaceAll(reg,”$4″);
String sd = r.replaceAll(reg,”$6″);
int y, m, d;
try {
y = Integer.parseInt(sy);
} catch(Exception e) {
y = 0;
}
try {
m = Integer.parseInt(sm);
} catch(Exception e) {
m = 0;
}
try {
d = Integer.parseInt(sd);
} catch(Exception e) {
d = 0;
}
System.out.format(“%d, %d, %d”, y, m, d);
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/291085.html