Java位運算子
解析:位運算子是對二進位制數值進行運算,左移一位相當於乘2運算,右移一位相當運算。位移運算子效率較高,往往在遊戲開發中經常使用。
參考答案:java語言中有三種位移運算子,分別是<<;左移運算子,左移1位相當於乘2.>>;有符號右移,右移一位相當於除2;>>>;無符號右移,忽略符號位,空位都以0補齊。
三種移位運算子的移動規則和使用如下所示:
<<運算規則:按二進位制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。
語法格式:
需要移位的數字 << 移位的次數
例如: 3 << 2,則是將數字3左移2位
計算過程:
首先把3轉換為二進位制數字0000 0000 0000 0000 0000 0000 0000 0011,然後把該數字高位(左側)的兩個零移出,其他的數字都朝左平移2位,最後在低位(右側)的兩個空位補零。則得到的最終結果是0000 0000 0000 0000 0000 0000 0000 1100,則轉換為十進位制是12.數學意義:
在數字沒有溢位的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。
>>運算規則:按二進位制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1.
語法格式:
需要移位的數字 >> 移位的次數
例如11 >> 2,則是將數字11右移2位
計算過程:
>>>運算規則:按二進位制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補零。對於正數來說和帶符號右移相同,對於負數來說不同。 無符號右移與帶符號右移的區別就是 無符號始終補0
其他結構和>>相似。
你以十進位制的數除以你所要轉換的進位制數,把每次除得的餘數記在旁邊,所得的商數繼續除以進位制數,直到餘數為0時止.
100轉換為二進位制:
100/2=50....(餘數為0);
50/2=25.....(餘數為0);
25/2=12.....(餘數為1);
12/2=6......(餘數為0);
6/2=3.......(餘數為0);
3/2=1.......(餘數為1);
1/2=0.......(餘數為1);
所以100的二進位制表示形式為1100100;
1100100轉為十進位制:
1 * 2 的6次方 + 1 * 2的5次方 + 0 + 0 + 1 * 2 的2 次方 + 0 + 0
100轉換成八進位制:
100/8=12...(餘數為4);
12/8=1.....(餘數為4);
1/8=0......(餘數為1);
然後把相應的餘數從低向高順著寫出來,如上的為144,此即為100的八進位制表示形式.
十進位制轉換為十六進位制與二進位制與前面的轉化為八進位制相同,如100轉換為十六進位制:
100/16=6....(餘數為4);
6/16=0......(餘數為6);
同理則以十六進位制表示的100形式為64;
負數如何轉換成二進位制
1個位元組它不管怎麼樣還是隻能表示256個數,因為有符號所以我們就把它表示成範圍:-128-127。它在計算機中是怎麼儲存的呢?
可以這樣理解,用最高位表示符號位,如果是0表示正數,如果是1表示負數,
剩下的7位用來儲存數的絕對值的話,能表示27個數的絕對值,再考慮正負兩種情況,
27*2還是256個數。首先定義0在計算機中儲存為00000000,對於正數我們依然可以像無符號數那樣換算,
從00000001到01111111依次表示1到127。那麼這些數對應的二進位制碼就是這些數的原碼。
到這裡很多人就會想,那負數是不是從10000001到11111111依次表示-1到-127,那你發現沒有,
如果這樣的話那麼一共就只有255個數了,因為10000000的情況沒有考慮在內。
實際上,10000000在計算機中表示最小的負整數,就是這裡的-128,而且實際上並
不是從10000001到11111111依次表示-1到-127,而是剛好相反的,從10000001到11111111依次
表示-127到-1。負整數在計算機中是以補碼形式儲存的,補碼是怎麼樣表示的呢,
這裡還要引入另一個概念——反碼,所謂反碼就是把負數的原碼(負數的原碼和和它的絕對值所對應的
原碼相同,簡單的說就是絕對值相同的數原碼相同)各個位按位取反,是1就換成0,是0就換成1,
如-1的原碼是00000001,和1的原碼相同,那麼-1的反碼就是11111110,而補碼就是在反碼的基礎上加1
,即-1的補碼是11111110+1=11111111,因此我們可以算出-1在計算機中是按11111111儲存的。
總結一下,計算機儲存有符號的整數時,是用該整數的補碼進行儲存的,0的原碼、補碼都是0,
正數的原碼、補碼可以特殊理解為相同,負數的補碼是它的反碼加1。
下面再多舉幾個例子,來幫助大家理解!
十進位制 → 二進位制 (怎麼算?要是不知道看計算機基礎的書去)
47 → 101111
有符號的整數 原碼 反碼 補碼
47 00101111 00101111 00101111(正數補碼和原碼、反碼相同,不能從字面理解)
-47 10101111 11010000 11010001(負數補碼是在反碼上加1)
現在知道了吧?
6的原碼是00000110
6的反碼是11111001
反碼+1以後表示負數
11111010
這就是-6
二進位制數 1111 如果看做有符號數時 最高位表示符號位啊,1代表符號,0代表正號
1111=-111=-7啊,因為111轉換成十進位制是7,這會吧
1111無符號時,就是看作01111就可以了01111=+1111=15
正數轉負數是:對應正數的二進位制按位取反,加1;
那負數轉正數不都應該是:先減1,在取反;先取反,在加1也行