在計(jì)算機(jī)中數(shù)據(jù)都是以二進(jìn)制原碼的形式存在的,而數(shù)字間的運(yùn)算都是以補(bǔ)碼的形式進(jìn)行欣范。然而補(bǔ)碼又分為正數(shù)的補(bǔ)碼跟負(fù)數(shù)的補(bǔ)碼掠河;
原碼:
1.數(shù)字的最原始二進(jìn)制
反碼:
1. 一個(gè)數(shù)如果是正栈虚,則它的反碼與原碼相同;
2. 一個(gè)數(shù)如果是負(fù)汁掠,則符號(hào)位為1略吨,其余各位是對(duì)原碼取反;
補(bǔ)碼:
1. 一個(gè)數(shù)如果為正考阱,則它的補(bǔ)碼跟原碼相同
2. 一個(gè)數(shù)如果是負(fù)翠忠,則它的補(bǔ)碼為負(fù)數(shù)反碼加1
接下來(lái)要說(shuō)的就是java中byte跟int之間的關(guān)系,1byte=8bit乞榨,1int=4byte=32bit秽之,在java編程中經(jīng)常要遇到的問(wèn)題是byte跟int的轉(zhuǎn)換:
byte 占8位,取值范圍是11111111~011111111 -128到127
int 占32位吃既。取值范圍是 -2的31次方 到2的31次方
int轉(zhuǎn)byte則是取低8位丟棄后24位考榨,并將取的結(jié)果作用于byte的取消范圍內(nèi);
byte轉(zhuǎn)int則是以補(bǔ)位的形式補(bǔ)齊后24位形成一個(gè)32位的int鹦倚,因?yàn)閎yte的取值范圍有限河质,所以在byte表示的復(fù)數(shù)轉(zhuǎn)為int自然隨取值范圍的擴(kuò)散而擴(kuò)散,即比如-128在byte中是11111111申鱼,轉(zhuǎn)為int自然會(huì)轉(zhuǎn)為-128在int的位置愤诱,所以byte轉(zhuǎn)int,如果byte的數(shù)是復(fù)數(shù)云头,轉(zhuǎn)int自然是復(fù)數(shù)捐友,為了保證byte轉(zhuǎn)int的數(shù)為正,那么就得將后24位舍棄(丟棄最高位符號(hào)位) &0xff