本文目錄一覽:
- 1、java位移問題
- 2、>1”和“-1>>>1”有何差別?’ title=’java移位運算問題:“-1>>1”和“-1>>>1”有何差別?’>java移位運算問題:“-1>>1”和“-1>>>1”有何差別?
- 3、java中的移位問題 程序如下
- 4、java中如何實現移位循環?
- 5、java移位運算的一些基本概念問題,求解釋?
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
這樣就沒問題了。
>1”和“-1>>>1”有何差別?’>java移位運算問題:“-1>>1”和“-1>>>1”有何差別?
這個是帶符號右移
這個是無符號右移
-1的二進制反碼錶示為 11111111 11111111 11111111 11111111
-11的結果是 : 1111111 1111111 11111111 1111111
-11的結果是: 01111111 11111111 1111111 11111111
無符號右移後前面補0,而帶符號右移是補符號位,也就 是第一位,負數補1,正數補0
Java的優點:
java是純面向對象編程的語言;
平台無關性 (一次編譯,到處運行;Write Once,Run Anywhere);
java提供了許多內置的類庫,通過這些類庫,簡化了開發人員的設計工作,同時縮短了項目開發時間;
提供了對Web應用開發的支持,例如,Applet,Servlet,和JSP可以用來開發Web應用程序,Socket,RMI可以用來開發分布式應用程序的類庫。
java中的移位問題 程序如下
我們知道,在java中,int是佔4個字節的,也就是32位。
這個程序,應該是為了將一個int類型轉換成32位2進制數。
原理:
1. :左移運算符,在沒有數字溢出的情況下,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。
2. :位運算符,當兩邊操作數的位同時為1時,結果為1,否則為0。如111 101 = 101。
切入正題:
1. 為了取得32位完整的二進制數,需要循環32次,131即2的31次方,表示最高位為1,其餘31位均為0的二進制數;130即2的30次方,表示第二位為1,其餘31位均為0的二進制數;以此類推。
2. 程序從高位開始轉換int類型,我們想要截取二進制數的特定某位時,我們需要用一個此位為1,其餘位均為0的二進制數來做運算,例如,我們想截取15的最高位,我們只需使用最高位為1的32位二進制數與15做運算即可。因為假設假設某位為1,1 1 = 1,假設某位為0,0 1 = 0,均能得到原來的數。而1或0與0相與均為0.
總之,程序是從高位到低位依次一位一位截取int對應二進制數,輸出的結果便是int對應的二進制數
java中如何實現移位循環?
可以自己定義一個方法,先把右移的最低位保存起來(左移就是最高位),再用移一位,再把最低位加上去,循環n次
java移位運算的一些基本概念問題,求解釋?
首先 第一個問題-1的二進制表示並不是1111 1111而是1000 0001 ,最高位是(最左邊的一位)符號位,最高位為0表示是正數,1表示是負數
第二個問題是指整個數往左邊移
例如:3 2(3為int型)
1)把3轉換為二進制數字0000 0000 0000 0000 0000 0000 0000 0011,
2)把該數字高位(左側)的兩個零移出,其他的數字都朝左平移2位,
3)在低位(右側)的兩個空位補零。則得到的最終結果是0000 0000 0000 0000 0000 0000 0000 1100,
轉換為十進制是12。
同理,表示右移.
最後一個問題int val=-1 算術右移 不改變符號往右移 邏輯右移 並不能保證不改變符號 至於結果我試了一下並不相等。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/300352.html