標籤:
一個位元組包含8位, 第一位是符號位, 8位就可以是代碼27次方, 所以範圍為-2^7 ~ 2^7 - 1, 即-128到+127;
各種資料類型:
byte類型就是1個位元組,能夠代表的範圍為-2^7 ~ 2^7 - 1;
short類型為2個位元組,能夠代表的範圍為-2^16 ~ 2^16 - 1;
int類型為4個位元組,能夠代表的範圍為-2^31 ~ 2^31 - 1;
long類型為8個位元組,能夠代表的範圍為-2^64 ~ 2^64 - 1;
flaot的類型也為4位元組, 但是它的範圍比int大得多(來自百度知道:位符號位+8位指數(q)+23位底數(b),其解釋出來的形式是:b^q,由於指數q是8位有符號整數,範圍是-128 ~ 127,23位的底數(無符號)最大值就是2 ^ 23,算上指數的話,最大可以表達到2 ^ 23 ^ 127,但是由於電腦的運算能力限制,並不能處理到如此大的數,但是其取值範圍也會比32位整數大很多。 由於float類型是一個冪計算式,所以很多時候並不能表達一個精確值,例如0.1,如果使用float在記憶體中會被表示為0.10000000000000001,如果進行反覆計算將會導致非常大的誤);
double類型也為8個位元組;
移位元運算, 有符號左移"<<":
public class Test { public static void main(String args[]) { System.out.println( 10<<1 ); //相當於: 10*2 System.out.println( 10<<2 ); //相當於:10*2^2 System.out.println( 10<<3 ); //相當於:10*2^3 System.out.println( 10<<4 ); //相當於:10*2^4 }}
//輸出:
20
40
80
160
NONO
出處:http://www.cnblogs.com/diligenceday/
有符號右移動">>":
public class Test { public static void main(String args[]) { int num = 160; System.out.println( num>>1 ); System.out.println( num>>2 ); System.out.println( num>>3 ); System.out.println( num>>4 ); }}
//輸出:80402010
>>>:無符號右移,忽略符號位,空位都以0補齊;
無符號右移有個特性必須記住,因為在二進位中:負數的值正數的取反+1 ,當我們對一個負數進行無符號右移, 那麼無符號右移的值將會非常大:
public class Test { public static void main(String args[]) { int num = -1; System.out.println( num>>>1 ); }}
//輸出:2147483647
~:按位取反;
&:按位且;
|:按位或;
^:按位異或;
但是這些玩意兒有什麼用呢, 參考如下的js代碼, 原文連結:
(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]
會輸出:"sb"
或者這樣裝逼...
((""[~+[]]++)+"")[(+[])]+(!+[]+{})[(~((~+[]+~+[])<<(-(~+[]))))]
會輸出:"Ne"
進位之間的轉化參考, 進位參考:
10進位到2進位:
2進位到10進位:
NONO
出處:http://www.cnblogs.com/diligenceday/
軟體開發資料類型基礎