最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java基本數(shù)據(jù)類型的轉(zhuǎn)換

2020-03-26 13:49 作者:一枚猿  | 我要投稿

Java基本數(shù)據(jù)類型的轉(zhuǎn)換

今天我們來(lái)討論一下java中6種基本數(shù)據(jù)類型的轉(zhuǎn)換。它們分別是:byte,short,int,long,double,float。


記住一點(diǎn),數(shù)據(jù)范圍小的類型轉(zhuǎn)換成范圍大的類型,是不會(huì)出現(xiàn)問(wèn)題的。但是如果是范圍大的數(shù)據(jù)類型往范圍小的類型去轉(zhuǎn)換,就可能會(huì)出現(xiàn)問(wèn)題了。我將6種類型的互轉(zhuǎn)分成30種類型,下面我們將這30種類型都實(shí)踐一下。每種類型的轉(zhuǎn)換,我這里分4種情況,正數(shù)的轉(zhuǎn)換,負(fù)數(shù)的轉(zhuǎn)換,臨界值(最大值和最小值)的轉(zhuǎn)換,邊界外的轉(zhuǎn)換,邊界內(nèi)的轉(zhuǎn)換。


byte -> short


// 正數(shù)
byte a = 1;
// 負(fù)數(shù)
byte b = -1;
// 最大值
byte c = 127;
// 最小值
byte d = -128;
System.out.println((short)a); ? // 1
System.out.println((short)b); ?// -1
System.out.println((short)c); ?// 127
System.out.println((short)d); ?// -128
System.out.println((short)(c+a)); ?// 128
System.out.println((short)(d+b)); ?// -129


我們首先看上面的代碼塊。發(fā)現(xiàn)這五種情況的轉(zhuǎn)換,結(jié)果都是正確的。這是因?yàn)閟hort類型能夠表示的范圍大于byte類型,所以是不會(huì)出現(xiàn)問(wèn)題。

short -> byte


short a = 1;
short b = -1;
short c = Short.MAX_VALUE; // 32767
short d = Short.MIN_VALUE; // -32768
short f = 128;
short g = -129;

System.out.println((byte)a); ? // 1
System.out.println((byte)b); ?// -1
System.out.println((byte)c); ?// -1
System.out.println((byte)d); ?// 0
System.out.println((byte)(c+a)); ?// 0
System.out.println((byte)(d+b)); ?// -1
System.out.println((byte)f); ? // -128
System.out.println((byte)g); ?// 127


我們會(huì)發(fā)現(xiàn)只有前面兩個(gè)輸出是對(duì)的 其他都是錯(cuò)誤的。下面我們就來(lái)分析一下 為什么會(huì)出現(xiàn)這樣的情況。

首先來(lái)看c(32767)在計(jì)算機(jī)是怎么存儲(chǔ)的。我們都知道計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)都是按二進(jìn)制來(lái)存儲(chǔ)的,因此將c的值轉(zhuǎn)換成二進(jìn)制就是如圖下:

如果是范圍大類型轉(zhuǎn)換成范圍小的類型,計(jì)算機(jī)就會(huì)采取截取的方式,注意截取是從高位開始的。因?yàn)閟hort是2個(gè)字節(jié),byte是1個(gè)字節(jié),因此被截取之后的結(jié)果如下:



提示

截取的時(shí)候,計(jì)算機(jī)是不知道哪一位是用來(lái)表示符號(hào)位的,因此,截取之后有可能符號(hào)位跟截取之前不一致。

截取之后符號(hào)位是1。說(shuō)明截取之后,該數(shù)變成了一個(gè)負(fù)數(shù)。在以前的文章里面說(shuō)過(guò),對(duì)于負(fù)數(shù),計(jì)算機(jī)是采用補(bǔ)碼的形式進(jìn)行存儲(chǔ)的。那么我們就來(lái)推算一下該種數(shù)據(jù)對(duì)應(yīng)的原碼是多少:


最下面的一行就是其對(duì)應(yīng)的原碼。所以c的值被強(qiáng)行轉(zhuǎn)換成short之后變成了-1。

下面我們來(lái)看一下d(-32768)為什么轉(zhuǎn)成short之后是0?首先我們來(lái)看一下計(jì)算機(jī)是怎么存儲(chǔ)這個(gè)數(shù)的。

-32768轉(zhuǎn)換成二進(jìn)制是:

從最高位截取,因此就只剩下了8個(gè)0,因此轉(zhuǎn)換成10進(jìn)制就是0。



Java基本數(shù)據(jù)類型的轉(zhuǎn)換的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
通辽市| 辰溪县| 黔东| 桂东县| 满城县| 民乐县| 海盐县| 东乌| 津南区| 定西市| 揭东县| 洛宁县| 朝阳县| 江城| 潮州市| 英吉沙县| 叙永县| 周口市| 甘南县| 黄龙县| 夏津县| 屏东市| 分宜县| 德昌县| 屯留县| 五华县| 宜兰县| 崇仁县| 锦屏县| 句容市| 兴安县| 青海省| 汤原县| 莎车县| 抚松县| 扶绥县| 西乡县| 娱乐| 汪清县| 来安县| 旌德县|