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