java中byte的取值范圍 為什么byte類型之間的值不能相加?
為什么byte類型之間的值不能相加?字節(jié)代表一個(gè)字節(jié),它的表示范圍[-128 127],字節(jié)B=4,字節(jié)B1=3,字節(jié)B2=7都在這個(gè)范圍內(nèi),沒問題。這里的另一個(gè)問題是,我們編寫的整數(shù)沒有顯式指示類型
為什么byte類型之間的值不能相加?
字節(jié)代表一個(gè)字節(jié),它的表示范圍[-128 127],字節(jié)B=4,字節(jié)B1=3,字節(jié)B2=7都在這個(gè)范圍內(nèi),沒問題。這里的另一個(gè)問題是,我們編寫的整數(shù)沒有顯式指示類型(例如,字節(jié)B=4中的4)在默認(rèn)情況下是int,所以為什么不將其編譯錯(cuò)呢?這里(我認(rèn)為)如果整數(shù)沒有超過這個(gè)范圍(例如,字節(jié)B=4在這個(gè)范圍內(nèi)),編譯系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換。那么b=B1,B2怎么會(huì)編譯錯(cuò)誤呢?此外,B1和B2是字節(jié)類型。這里Java有自己的機(jī)制,就是防止兩個(gè)小數(shù)的加法超過它所表示的范圍,把B1和B2變成int,加法后也是int類型(注意這里的int和不表示上述類型的整數(shù)之間有區(qū)別)。默認(rèn)值是int,這相當(dāng)于您自己的實(shí)際定義。例如,int c=0,系統(tǒng)不會(huì)自動(dòng)轉(zhuǎn)換顯式指定數(shù)據(jù)類型的數(shù)字。轉(zhuǎn)換還必須強(qiáng)制自己的類型轉(zhuǎn)換B=byte(B1,B2),這似乎更符合防止兩個(gè)數(shù)字相加超過自身表示范圍的機(jī)制。B=B17和B=b1b2相似。字節(jié)B=3.7很容易理解。編譯器將3.7作為一個(gè)整體,即10。首先,應(yīng)該理解Java中沒有位數(shù)據(jù)類型。所以如果要表示位,可以使用byte[]方法
1 byte=8 bit
只要提取每個(gè)位,就需要將其右移到右邊的第一位,并用這種方法對(duì)1進(jìn)行求和運(yùn)算,除所需位外,其余都是0。它的二進(jìn)制(1,0)正好是數(shù)字1,0;
因此我們可以將它封裝為://byte to bit
byte[]temp=新字節(jié)[8
]for(int i=7 i>=0 i--){
temp[i]=(byte)((A>> i)&;1) ]}
]return temp
}
//位到字節(jié)
公共靜態(tài)字節(jié)位(byte[]a){
byte temp=(byte)0
For(int i=0 i< bits i){
temp=temp | a[i]<< i]}]return temp]}
]希望能對(duì)您有所幫助,謝謝。