亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

基本類型間的類型轉換(數值型)

2019-11-14 16:27:27
字體:
來源:轉載
供稿:網友

今天一打開博客,看到左上角的園齡5年,目光有些恍然,昔日作為學生上課的情景、已經慢慢變的模糊。是啊、畢業已經3年有余,時光不再來...

 

一、原碼和補碼

在步入正文說類型轉換之前,先做一個小鋪墊,了解一下原碼和補碼。

[注:由于同一個數字在用不同位數的原碼或補碼表示時、結果不同,所以如無特殊說明、該小節下出現的所有原碼和補碼均為8位]

 

原碼(true form)是一種計算機中對數字的二進制定點表示方法。原碼表示法在數值前面增加了一位符號位(即最高位為符號位):

正數該位為0,負數該位為1(0有兩種表示:+0和-0),其余位表示數值的大小。

1、原碼優點:簡單直觀;例如,我們用8位二進制表示一個數,+11的原碼為00001011,-11的原碼就是10001011

2、原碼缺點:原碼不能直接參加運算,可能會出錯。例如數學上,1+(-1)=0,而在二進制中 00000001+10000001=

10000010,換算成十進制為-2。顯然出錯了。

 

補碼(two's complement) 在計算機系統中,數值一律用補碼來表示和存儲。補碼是可以直接參與運算的。原碼和補碼表示方法均有

符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位表示方法不相。

1、知原碼求補碼

求正數的補碼:正整數的補碼與原碼相同。

【例】+9的補碼是00001001。

求負數的補碼:求負整數的補碼, 在原碼的基礎之上 符號位不變,數值位各位取反,最后整個數加1。

【例】求-5的補碼。
-5的原碼(10000101)→符號位不變(10000101)→數值位取反(11111010)→加1(11111011)
所以-5的補碼是11111011。
【例】數0的補碼表示是唯一的。
[+0]補=[+0]原=00000000
[-0]補=11111111+1=00000000


2、知補碼求原碼

已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
1)如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
2)如果補碼的符號位為“1”,表示是一個負數,那么求給定的這個補碼的補碼就是要求的原碼。
【例】已知一個補碼為11111001,則原碼是10000111(-7)。
因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。
其余七位1111001取反后為0000110;
再加1,所以是10000111。

3、補碼的運算

 補碼:http://baike.baidu.com/view/377340.htm

 

二、整形間的類型轉換

    class PRogram    {        static void Main(string[] args)        {            Console.WriteLine("注:該demo中的所有例子均為整形間的無精度損失的類型轉換,為了方便閱讀打印的是字節而不是位");            Console.WriteLine("1、補位式轉化");            Console.WriteLine("/r/n###32位有符號 轉 64位無符號###");            Console.WriteLine("/r/n例1");            int i = int.MaxValue;            ulong ul = (ulong)i;            Print(BitConverter.GetBytes(i), i.ToString(), "轉化前");            Print(BitConverter.GetBytes(ul), ul.ToString(), "轉化后");            Console.WriteLine("/r/n例2");            i = int.MinValue;            ul = (ulong)i;            Print(BitConverter.GetBytes(i), i.ToString(), "轉化前");            Print(BitConverter.GetBytes(ul), ul.ToString(), "轉化后");            Console.WriteLine("/r/n###32位有符號 轉 64位有符號###");            Console.WriteLine("/r/n例3");            i = int.MinValue;            long l = (long)i;            Print(BitConverter.GetBytes(i), i.ToString(), "轉化前");            Print(BitConverter.GetBytes(l), l.ToString(), "轉化后");            Console.WriteLine("/r/n###32位無符號 轉 64位有符號###");            Console.WriteLine("/r/n例4");            uint ui = uint.MaxValue;            l = (long)ui;            Print(BitConverter.GetBytes(ui), ui.ToString(), "轉化前");            Print(BitConverter.GetBytes(l), l.ToString(), "轉化后");            Console.WriteLine("2、截位式轉化");            Console.WriteLine("/r/n###64位有符號 轉 32位有符號###");            Console.WriteLine("/r/n例5");            l = long.MaxValue;            i = (int)l;            Print(BitConverter.GetBytes(l), l.ToString(), "轉化前");            Print(BitConverter.GetBytes(i), i.ToString(), "轉化后");            Console.WriteLine("/r/n###64位無符號 轉 32位有符號###");            Console.WriteLine("/r/n例6");            ul = ulong.MaxValue;            i = (int)ul;            Print(BitConverter.GetBytes(ul), ul.ToString(), "轉化前");            Print(BitConverter.GetBytes(i), i.ToString(), "轉化后");            Console.WriteLine("3、轉換符號位式轉化");            Console.WriteLine("/r/n###32位無符號 轉 32位有符號###");            Console.WriteLine("/r/n例7");            ui = uint.MaxValue;            i = (int)ui;            Print(BitConverter.GetBytes(ui), ui.ToString(), "轉化前");            Print(BitConverter.GetBytes(i), i.ToString(), "轉化后");            Console.WriteLine("/r/n###32位有符號 轉 32位無符號###");            Console.WriteLine("/r/n例8");            i = int.MinValue;            ui = (uint)i;            Print(BitConverter.GetBytes(i), i.ToString(), "轉化前");            Print(BitConverter.GetBytes(ui), ui.ToString(), "轉化后");            Console.Read();        }        private static void Print(byte[] buffer, string result, string tag = "")        {            Console.WriteLine(tag);            Console.WriteLine("數值:" + result);            Console.Write("字節數組(補碼):");            foreach (byte b in buffer)            {                Console.Write(string.Format("{0},", b.ToString()));            }            Console.WriteLine("");        }    }

  

      

 根據上述的8個例子可以得出如下結果:

 1、補位式轉化、即少位數據類型向多位數據類型轉化 (例1、例2、例3、例4)

  所補位與操作數的數據類型有關,與目標數據類型無關。

  如果操作數是有符號的數據類型,所補位一律為操作數的符號位,如果操作數是無符號的數據類型,所補位一律為0。

 2、截位式轉化、即多位數據類型向少位數據類型轉化 (例5、例6)

  該轉換方式就是簡單的截取有效數位(即丟棄高位),和操作數的類型無關。

 3、轉換符號位式轉化、即相同位數有無符號數據類型間的轉化(例7、例8)

   發生該類型轉化時,只是最高位的意義發生了變化,進而可能導致結果改變。

 

三、整形與浮點型間的類型轉換

有了上面的基礎、再理解整形與浮點型的轉換就容易多了。

由整形向浮點型轉換的時候,如果整形數據的值過大或過小,就可能損失一些最低的有效位,造成精度損失(float的精度只有7位,double15~16位)。

 

四、參考資料:

原碼:http://baike.baidu.com/view/60480.htm

補碼:http://baike.baidu.com/view/377340.htm

 

最后祝園友們,中秋快樂(雖然晚了,但是誠意還在吧)。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线看www| 亚洲精品国精品久久99热一| 青青草成人在线| 97精品一区二区视频在线观看| 日韩电影中文 亚洲精品乱码| 欧美激情一级欧美精品| 韩曰欧美视频免费观看| 97精品国产97久久久久久春色| 国产精品亚洲片夜色在线| 国产精品福利网| 久久影院模特热| 日韩中文字幕免费视频| 91免费的视频在线播放| 米奇精品一区二区三区在线观看| 欧美精品在线极品| 免费97视频在线精品国自产拍| 黄色一区二区三区| 精品美女国产在线| 91免费人成网站在线观看18| 日韩暖暖在线视频| 国产精品色视频| 国产91精品青草社区| 影音先锋欧美在线资源| 国产视频久久久久久久| 久久亚洲精品小早川怜子66| 亚洲福利视频免费观看| 国产一区二区激情| 在线激情影院一区| 欧美一区二区三区免费视| 精品国偷自产在线| 91禁外国网站| 欧美成人精品在线播放| 亚洲欧洲日韩国产| 日韩免费av在线| 亚洲欧美国产一本综合首页| 国产精品入口免费视| 最近2019中文字幕mv免费看| 国产一区二区av| 亚洲3p在线观看| 38少妇精品导航| 成人激情综合网| 亚洲欧洲免费视频| 欧美激情视频网| 日韩美女福利视频| 国产精品视频午夜| 亚洲国产精品va在看黑人| 中文字幕精品av| 不卡av日日日| 国产精品视频网址| 欧美激情亚洲激情| 亚洲视频777| 538国产精品一区二区在线| 亚洲一区亚洲二区亚洲三区| 久久精品久久久久久国产 免费| 国产精品偷伦免费视频观看的| 久久亚洲精品视频| 久久精品电影网站| 97在线观看免费| 日韩成人中文字幕| 国产精品久久激情| 色婷婷成人综合| 亚洲欧美变态国产另类| 国产v综合v亚洲欧美久久| 国产精品高潮呻吟久久av野狼| 日韩视频永久免费观看| 欧美极品美女视频网站在线观看免费| 国产日韩av高清| 欧美又大又硬又粗bbbbb| 97精品一区二区视频在线观看| 久久精品视频中文字幕| 欧美日韩国产成人高清视频| 成人免费在线视频网站| 亚洲成人网久久久| 久久国产精品99国产精| 国产精品自产拍高潮在线观看| 国产大片精品免费永久看nba| 成人免费看黄网站| 欧美性猛交xxxx乱大交蜜桃| 国产亚洲日本欧美韩国| 国产日韩精品视频| 欧美精品18videos性欧| 国产成人+综合亚洲+天堂| 九九视频这里只有精品| 国产精品香蕉在线观看| 国产在线精品播放| 国产大片精品免费永久看nba| 久久99国产综合精品女同| 亚洲国产精品电影在线观看| 国产v综合v亚洲欧美久久| 成人福利网站在线观看| 国产精品第一区| 亚洲护士老师的毛茸茸最新章节| 亚洲国产成人久久| 欧美另类高清videos| 日韩电影视频免费| 91在线精品视频| 国产精品久久久久999| 狠狠躁夜夜躁久久躁别揉| 亚洲人a成www在线影院| 两个人的视频www国产精品| 这里只有精品在线观看| 日韩av电影国产| 亚洲无限乱码一二三四麻| 尤物tv国产一区| 久久免费国产视频| 日韩av免费在线观看| 久久久精品视频成人| 亚洲精品国产品国语在线| 欧美在线视频观看免费网站| 色噜噜久久综合伊人一本| 色一区av在线| 久久伊人精品天天| 插插插亚洲综合网| 人妖精品videosex性欧美| 国产成人精品网站| 91人成网站www| 91wwwcom在线观看| 欧美有码在线视频| 中文字幕免费国产精品| 久久久伊人欧美| 欧美性开放视频| 欧美激情第一页xxx| 中文字幕9999| 国产一区二区丝袜高跟鞋图片| 国产亚洲欧洲在线| 一本色道久久88亚洲综合88| 欧美华人在线视频| 亚洲sss综合天堂久久| 国产精品久久久久久久av电影| 亚洲人成电影在线观看天堂色| 欧美精品videos另类日本| 国产不卡一区二区在线播放| 国产精品91在线观看| 亚洲国产高清福利视频| 亚洲国产精品专区久久| 国内精品久久久久久久| 日韩精品999| 午夜精品一区二区三区在线视| 一本大道亚洲视频| 欧美午夜性色大片在线观看| 91精品国产乱码久久久久久久久| 69av成年福利视频| 国产欧美精品一区二区三区-老狼| 精品视频在线观看日韩| 国产成人综合精品在线| 欧美一级在线亚洲天堂| 亚洲国产中文字幕久久网| 亚洲成人av片在线观看| 成人激情视频免费在线| 久久艹在线视频| 欧美午夜精品久久久久久浪潮| 中文字幕av一区二区| www.欧美精品一二三区| 精品一区二区三区四区在线| 日韩中文字幕免费视频| 国产一区二区三区直播精品电影| 国产成人精品在线视频| 一区二区三区高清国产| 成人免费看黄网站| 久久精品国产一区| 18性欧美xxxⅹ性满足| 国产中文欧美精品| 狠狠色噜噜狠狠狠狠97| 日韩av中文在线|