999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

源于MATLAB中cast和typecast函數數據格式的探討

2020-08-13 07:02:45王選張欣李曉歐嚴加勇白寶丹查雨彤單純玉
教育教學論壇 2020年29期
關鍵詞:符號

王選 張欣 李曉歐 嚴加勇 白寶丹 查雨彤 單純玉

[摘 要] MATLAB是工程計算中應用非常廣泛的一種軟件,熟練掌握MATLAB是大部分工科類學生所必備的技能。通過對MATLAB教材中習題的解答,分析了cast和typecast兩個函數,介紹了大端和小端兩種字節序類型,以及整數及浮點數在計算機中的存儲格式。由此,可以使學生學會使用MATLAB函數,并了解數據在計算機中存儲格式。

[關鍵詞] MATLAB;IEEE 754;字節序;數據格式

[基金項目] 上海市教委重點課程建設項目“數字信號處理”(B1-0200-19-309411);上海健康醫學院教學建設項目“基于穿戴式醫療技術與器械工程研究中心的生物醫學工程本科創新能力個性化培養‘四個一工程”(B1-0200-19-309302)

[作者簡介] 王 選,博士,上海健康醫學院醫療器械學院講師,主要從事生物醫學信號的分析與處理研究;單純玉,博士,上海健康醫學院醫療器械學院教授(通信作者),主要從事醫學儀器設計與開發研究。

[中圖分類號] G642.0 ? ?[文獻標識碼] A ? ?[文章編號] 1674-9324(2020)29-0363-03 ? ?[收稿日期] 2019-10-10

MATLAB是美國MathWorks公司出品的商業數學軟件,用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境。MATLAB課程在很多高校中已成為工科類學生必修的專業基礎課,熟練掌握MATLAB已成為相關專業學生必備的技能之一。

一、教材中的習題

在教學中,我們的教材采用了張威編著的《MATLAB基礎與編程入門》(第三版),該教材受中國電子教育學會高教分會推薦,是普通高等教育電子信息類”十三五“規劃教材。該教材第3章數據類型的章后練習第1題為[1]“在進行數值類型數據轉換時,可以使用cast或typecast函數,例如a=-1,若使用這兩個函數將變量a轉換為無符號的8位整數,計算的結果是什么?”

針對此題,我們利用MATLAB 2015b運行如下的代碼

a=-1;

b=cast(a,'uint8')

c=typecast(a,'uint8')

得到結果為

b=0

c=0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?240 ? ?191

雖然結果運行出來,但是為何會出現這個結果?這個結果令學生比較困惑,本文將對問題進行解答,同時介紹數據在計算機中的存儲格式。

二、cast函數和typecast函數

查詢MATLAB的幫助文檔,可知cast函數會截取數據以適應新的數據類型,它會改變內存中的數據。已知無符號8位整數‘uint8的數值表示范圍為0~2^8-1,即0~255。故a=-1時,則得到運行結果b=0。對如下數值進行轉換,有cast(-2.5,'uint8')=0;cast(25.5,'uint8')=26;%四舍五入cast(300,'uint8')=255;%最大為255同理對于有符號16位整數‘int16,其數值表示范圍為-2^15~2^15-1,有cast(-20.5,'int16')=-21cast(-65536,'int16')=-32768,即-2^15.

查詢MATLAB的幫助文檔,可知typecast函數與cast函數不同,它在進行數據類型轉換時,不會截取數據,不會改變內存中數據。對其結果的解釋需要了解數據在內存中的存儲格式。

三、內存中的數據存儲格式

(一)大端和小端字節序

字節序是指整數在內存中保存的順序,有大端(big-endian)和小端(little-endian)兩種類型。1980年,Danny Cohen在其著名的論文“On Holy Wars and a Plea for Peace”中為了平息一場關于在消息中字節該以什么樣的順序進行傳送的爭論而引用了大端和小端兩個詞。[2]他非常形象貼切地把支持從一個消息序列的最高位開始傳送的那伙人叫作Big-Endians,支持從最低位開始傳送的相對應的叫作Little-Endians。

在計算機的內存中,小端字節序將低序字節存儲在起始地址(低位編址),而大端是將高序字節存儲在起始地址(高位編址)。例如對于857的存儲,兩種字節序的存儲方式如表1所示。

小端字節序最符合人的思維,即地址低位存儲值的低位,地址高位存儲值的高位。而大端字節序是最直觀的字節序,即地址低位存儲值的高位,地址高位存儲值的低位。只需要把內存地址從左到右按照由低到高的順序寫出,把值按照通常的高位到低位的順序寫出;兩者對照,一個字節一個字節的填充進去。

計算機中不同的CPU有不同的字節序類型,x86系列的CPU都是小端的字節序。

(二)整數類型

1.正數。數據在內存中是以補碼存儲的,正數的補碼與原碼相同。

對于數值1,其補碼為“0000 0001”,則typecast函數保持其補碼不變,故為typecast(int8(1),'uint8')=1。同理,對于有符號32位整數來說,256的補碼為“0000 ?0000 ?0000 ?0000 ?0000 ?0001 ?0000 ?0000”。

如果將其轉換為無符號8位整數,則上述補碼以8位為一個單位進行分隔,得到“0000 ?0000,0000 ?0000, 0000 ?0001, 0000 ?0000”。

以小端字節序看待,低位地址存值的低位,高位地址存高位。故執行命令typecast(int32(256),'uint8')得到結果為“0 ?1 ?0 ?0”。

如果將256轉換為無符號16位整數,則補碼以16位為一個單位進行分隔,得到“0000 ?0000 ?0000 ?0000, 0000 ?0001 ?0000 ?0000”。

再以小端字節序看待,故執行命令typecast(int32(256),'uint16')得到結果為“256 ?0”。

3.負數。對于負數,補碼與原碼不同。

例如于有符號8位整數,-2的原碼為“1000 0010”,反碼為“1111 1101”,補碼為“1111 1110”。

typecast函數保持其補碼不變,故將其轉換為無符號8位整數時,故為typecast(int8(-2),'uint8')=254。

若-2為有符號16位整數,則原碼為“1000 ?0000 0000 0010”,反碼為“1111 1111 1111 1101”,補碼為“1111 1111 1111 1110”,將其轉換為無符號8位整數時,則8位為一個單位進行分隔,有“1111 ?1111,1111 ?1110”。以小端字節序看待,故執行倒序typecast(int16(-2),'uint8')得到結果為254 255。

(三)浮點數

對于浮點數的表示,IEEE(Institute of Electrical and Electronics Engineers,電子電氣工程師協會)在1985年制定了二進制浮點數算術標準(ANSI/IEEE Std 754-1985),又稱IEC 60559:1989,它是微處理器系統的二進制浮點數算術。[3,4]根據此標準,一個單精度浮點數用32位二進制數存儲,最高位第32位為符號位,中間的第24-31位為指數部分,最后第1-23位為小數部分。雙精度浮點數用64位二進制數存儲,最高位第64位為符號位,中間的第53-63位為指數部分,最后第1-52位為小數部分,如表2所示。

即二進制為“1011 1111 1111 0000 0000 ……”。

將其轉換為無符號8位整數,則以8位為一個單位進行分隔,得到“1011 1111,1111 0000,0000 ……”。以小端字節序看待,故執行命令typecast(-1,'uint8')得到結果為“0 ?0 ?0 ?0 ?0 ?0 ?240 ?191”。即之前的運行結果。

同理若將其轉換為無符號16位整數,則以16位為一個單位進行分隔,得到“1011 ?1111 ?1111 ?0000,0000 ……”。以小端字節序看待,故執行命令typecast(-1,'uint16')得到結果為“ 0 ?0 ?0 ?49136”。

四、結果與討論

通過以上對MATLAB的運行結果的解釋,我們介紹了兩個函數的特點,以及整數及浮點數在內存的存儲格式。因為MATLAB默認的格式為雙精度浮點數,故本文對雙精度浮點數作了詳細介紹,單精度浮點數的情況類似。此外,我們只針對習題分析了雙精度浮點數轉換為無符號整數的情況,如果要轉換為其他類型的數據,同理可以進行分析。

總之,通過以上分析,加深了學生對數據格式的理解,并啟發學生面對困惑,要查找資料進行解決。

參考文獻

[1]張威.MATLAB基礎與編程入門[M].第3版.西安:西安電子科技大學出版社,2017.

[2]Cohen D.On Holy Wars and a Plea for Peace[J].Computer,1981(14):48-54.

[3]朱亞超.基于IEEE754的浮點數存儲格式分析研究[J].計算機與信技術,2006(9):50-52.

[4]楊軍.基于IEEE的浮點數格式分析及轉換方法研究[J].甘肅科技縱橫,2009,38(5):19-20.

猜你喜歡
符號
幸運符號
符號神通廣大
學符號,比多少
幼兒園(2021年6期)2021-07-28 07:42:14
“+”“-”符號的由來
靈魂的符號
散文詩(2017年17期)2018-01-31 02:34:20
怎樣填運算符號
變符號
倍圖的全符號點控制數
圖的有效符號邊控制數
草繩和奇怪的符號
主站蜘蛛池模板: 国产精品理论片| 白浆免费视频国产精品视频| 色婷婷在线播放| 午夜无码一区二区三区| 99精品伊人久久久大香线蕉| 野花国产精品入口| 99精品一区二区免费视频| 91www在线观看| 久久综合伊人77777| 国产精品福利在线观看无码卡| 曰韩免费无码AV一区二区| 成人91在线| 毛片手机在线看| 露脸国产精品自产在线播| 91香蕉国产亚洲一二三区| 波多野结衣无码中文字幕在线观看一区二区 | 亚洲第一区精品日韩在线播放| 日本道综合一本久久久88| 亚洲人人视频| 九九热精品视频在线| 国产欧美中文字幕| 天堂成人av| 好吊妞欧美视频免费| 免费在线a视频| 毛片网站在线看| 91小视频版在线观看www| 成人小视频在线观看免费| 91蜜芽尤物福利在线观看| 不卡网亚洲无码| 亚洲黄色网站视频| 成人午夜亚洲影视在线观看| 毛片免费视频| 亚洲一区二区三区在线视频| 天堂久久久久久中文字幕| a级毛片免费网站| 精品国产黑色丝袜高跟鞋| 直接黄91麻豆网站| 伊人精品视频免费在线| 中文字幕欧美日韩高清| 日本午夜三级| 国产无码制服丝袜| 自拍中文字幕| 亚洲欧美日韩成人在线| 天堂亚洲网| 乱系列中文字幕在线视频| 暴力调教一区二区三区| 黄色一及毛片| 久久国产精品电影| 伊人成人在线| 成人午夜久久| 日韩在线第三页| 国产91全国探花系列在线播放| 精品久久综合1区2区3区激情| 国产精品无码影视久久久久久久| 人妻一区二区三区无码精品一区 | 久久国产精品麻豆系列| 麻豆精品久久久久久久99蜜桃| 精品夜恋影院亚洲欧洲| 91丨九色丨首页在线播放| 国产小视频免费观看| 亚洲国产精品一区二区第一页免| 色爽网免费视频| 51国产偷自视频区视频手机观看| 麻豆国产精品一二三在线观看| 无码'专区第一页| 成人国产精品一级毛片天堂| 精品福利一区二区免费视频| 国产精品不卡片视频免费观看| 国产成人高精品免费视频| 国产不卡国语在线| 免费一级成人毛片| 亚洲欧美日韩成人在线| 国产 在线视频无码| 萌白酱国产一区二区| 亚洲无码高清一区| 亚洲一区二区约美女探花| 丁香婷婷综合激情| 99伊人精品| 日本午夜精品一本在线观看| 亚洲欧美日韩精品专区| 72种姿势欧美久久久久大黄蕉| 99精品免费在线|