色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是數據類型轉換

汽車電子技術 ? 來源:C語言Plus ? 作者: Maye426 ? 2023-02-27 15:04 ? 次閱讀

數據類型轉換

數據類型轉換就是將數據(變量、數值、表達式的結果等)從一種類型轉換為另一種類型。

自動類型轉換

自動類型轉換就是編譯器默默地、隱式地、偷偷地進行的數據類型轉換,這種轉換不需要程序員干預,會自動發生。

  1. 將一種類型的數據賦值給另外一種類型的變量時就會發生自動類型轉換,例如:
float f = 100;

100 是 int 類型的數據,需要先轉換為 float 類型才能賦值給變量 f。再如:

int n = f;

f 是 float 類型的數據,需要先轉換為 int 類型才能賦值給變量 n。

在賦值運算中,賦值號兩邊的數據類型不同時,需要把右邊表達式的類型轉換為左邊變量的類型,這可能會導致數據失真(數據輸入和輸出不一致),或者精度降低;所以說,自動類型轉換并不一定是安全的。對于不安全的類型轉換,編譯器一般會給出警告。

  1. 在不同類型的混合運算中,編譯器也會自動地轉換數據類型,將參與運算的所有數據先轉換為同一種類型,然后再進行計算。轉換的規則如下:
  • 轉換按數據長度增加的方向進行,以保證數值不失真,或者精度不降低。例如,int 和 long 參與運算時,先把 int 類型的數據轉成 long 類型后再進行運算。
  • 所有的浮點運算都是以雙精度進行的,即使運算中只有 float 類型,也要先轉換為 double 類型,才能進行運算。
  • char 和 short 參與運算時,必須先轉換成 int 類型。

圖片

自動類型轉換示例:

#include
 int main()
{    
     float PI = 3.14159;    
     int s1, r = 5;    
     double s2;    
     s1 = r * r * PI;    
     s2 = r * r * PI;    
     printf("s1=%d, s2=%f\\n", s1, s2);    
     return 0;
 }

運行結果:s1=78, s2=78.539749

在計算表達式r*r*PI時,r 和 PI 都被轉換成 double 類型,表達式的結果也是 double 類型。但由于 s1 為整型,所以賦值運算的結果仍為整型,舍去了小數部分,導致數據精度丟失。

強制類型轉換

自動類型轉換是編譯器根據代碼的上下文環境自行判斷的結果,有時候并不是那么“智能”,不能滿足所有的需求。如果需要,程序員也可以自己在代碼中明確地提出要進行類型轉換,這稱為強制類型轉換。

強制類型轉換的格式為:

(type) expression

type為目標類型名稱,expression為表達式。例如:

(float) a;  //將變量 a 轉換為 float 類型
 (int)(x+y);  //把表達式 x+y 的結果轉換為 int 整型
 (float) 100;  //將數值 100(默認為int類型)轉換為 float 類型

下面是一個需要強制類型轉換的經典例子:

#include 
 int main()
{    
     int sum = 315;  //總數    
     int count = 7;  //數目    
     double average;  //平均數    
     average = (double) sum / count;    
     printf("Average is %lf!\\n", average);    
     return 0;
 }
 output:Average is 44.714286!

sum 和 count 都是 int 類型,如果不進行干預,那么sum / count的運算結果也是 int 類型,小數部分將被丟棄;雖然是 average 是 double 類型,可以接收小數部分,但是心有余力不足,小數部分提前就被“閹割”了,它只能接收到整數部分,這就導致除法運算的結果嚴重失真。

既然 average 是 double 類型,為何不充分利用,盡量提高運算結果的精度呢?為了達到這個目標,我們只要將 sum 或者 count 其中之一轉換為 double 類型即可。上面的代碼中,我們將 sum 強制轉換為 double 類型,這樣sum / count的結果也將變成 double 類型,就可以保留小數部分了,average 接收到的值也會更加精確。

注意不要寫作(double) (sum / count),這樣寫運算結果將是 44.000000,仍然不能保留小數部分。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數值
    +關注

    關注

    0

    文章

    80

    瀏覽量

    14359
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28360
  • 數據類型
    +關注

    關注

    0

    文章

    236

    瀏覽量

    13618
收藏 人收藏

    評論

    相關推薦

    JAVA語言的數據類型轉換

    JAVA語言的數據類型轉換很多場合需要用到類型轉換。例如,要把一個整型變量作為字符型變量來使用,就需要使用類型
    發表于 12-06 00:30

    【初級】labview教程每日一教之數據文件操作+數據類型轉換

    .[hide][/hide]13數據類型轉換在使用LabVIEW編程過程中,已有的數據類型不能滿足我們進一步處理的需要,常常需要對數據類型進行轉換
    發表于 11-07 10:01

    串口數據類型轉換問題

    串口接收到的二進制數據,到LabVIEW后被轉換為字符串格式,這個過程怎么做?
    發表于 05-09 11:33

    labview 輸出數據類型轉換

    問題,DAQmx輸出的是1D DBL的數組,經過數組子集與時間標識常量相組合使用的是捆綁嗎?里面時間變量t0、dt如何設置?加入了時間常量怎么在輸出端輸出和示波器想匹配的數據類型
    發表于 10-29 13:21

    數據類型轉換

    請問碰到這種情況該如何進行轉換呢?
    發表于 11-14 14:38

    關于數據類型轉換的問題

    如圖,最右邊的反饋節點輸出M序列。這個M序列的數據類型是布爾型。樓主想把M序列的數據類型轉換成布爾型數組。想了好久都不知道該怎么操作。希望能有人解答。樓主不勝感激
    發表于 04-27 21:07

    使用ActiveX函數與MATLAB建立連接時,變體數據類型轉換出現問題,應該怎么解決啊

    使用ActiveX函數與MATLAB接口創建一個隨機值矩陣并在MATLAB軟件中顯示該矩陣圖形,變體數據類型轉換出現問題,應該怎么解決啊
    發表于 04-26 15:53

    請問使用強制數據類型轉換函數的時候,數據類型type端該如何設置,才能使數據成功轉換類型

    本帖最后由 一只耳朵怪 于 2018-6-26 08:51 編輯 使用強制數據類型轉換函數的時候,數據類型type端該如何設置,才能使數據成功
    發表于 06-25 20:33

    請問28069的CLA不支持數據類型轉換嗎?

    = AdcResult.ADCRESULT8;// AdcResult.ADCRESULT8的值為0x0FFF;// 執行下面的語句之后lValue = 0lValue = AdcResult.ADCRESULT8;// AdcResult.ADCRESULT8的值為0x0FFF;難道28069的CLA不支持數據類型
    發表于 12-17 14:45

    數據類型如何轉換

    unsigned int num = 0;unsigned char i = 0x12;num = i;程序執行后,是不是把 i 的值賦給num的低8位、、、、、、、、、、
    發表于 06-16 04:35

    輻照度計中串行通訊數據類型轉換的研究

    本文探討了上位機利用MSCOMM 與輻照度計進行串行通訊過程中數據類型轉換的問題。分析了VC++6.0 環境下串行通訊中幾種特殊數據結構間的關系,總結出了發送及接收數據時可用的幾
    發表于 12-12 15:16 ?14次下載

    LabVIEW初級教程之數據類型轉換的詳細資料說明

    在使用LabVIEW編程過程中,已有的數據類型不能滿足我們進一步處理的需要,常常需要對數據類型進行轉換。比如不同表示法的數值類型之間轉換,或
    發表于 03-24 15:03 ?26次下載
    LabVIEW初級教程之<b class='flag-5'>數據類型</b><b class='flag-5'>轉換</b>的詳細資料說明

    SpinalHDL中Bundle數據類型轉換

    SpinalHDL中Bundle與SystemVerilog中的packed struct很像,在某些場景下,與普通數據類型之間的連接賦值可以通過asBits,assignFromBits來實現。
    的頭像 發表于 10-17 09:51 ?1320次閱讀

    什么是數據類型轉換

    常用的3種數據類型:1、Python數據類型第一種:字符串(str)。 2、Python數據類型第二種:整數(int)。 3、Python數據類型第三種:浮點數(float)。
    的頭像 發表于 02-23 15:21 ?1773次閱讀

    GaussDB數據類型轉換介紹

    數據類型轉換在實際應用中非常常見。GaussDB 作為一款企業級分布式關系型數據庫,在實際業務場景使用中,也會避免不了數據類型轉換。以下是
    的頭像 發表于 06-05 16:29 ?862次閱讀
    GaussDB<b class='flag-5'>數據類型</b><b class='flag-5'>轉換</b>介紹
    主站蜘蛛池模板: 亚洲 日本 欧美 中文字幕| 欧美亚洲日韩国码在线观看 | 影音先锋男人资源813.| 性绞姿始动作动态图| 午夜精品久久久久久影视riav| 日韩中文网| 千禧金瓶梅 快播| 日本69xxxxx| 天天爽夜夜爽夜夜爽| 少妇无码太爽了视频在线播放 | 亚洲精品久久无码AV片银杏| 亚洲AV无码乱码国产精品品麻豆| 日韩男明星| 一个人免费观看完整视频日本 | 真人美女精美小穴| 中文字幕乱码一区久久麻豆樱花| 达达兔欧美午夜国产亚洲| 福利一区国产| 国产老师开裆丝袜喷水漫画| 国产精品内射久久久久欢欢 | 国产欧美日韩精品a在线观看高清| 国产精自产拍久久久久久蜜| 麻豆天美国产一区在线播放| 你是淫荡的我的女王| 日本高清免费在线| 依恋影院在线观看| 国产精品久久人妻互换毛片| 女女破视频在线观看| 四虎影视国产精品亚洲精品hd| 做暖免费观看日本| 成人免费视频无遮挡在线看| 国产精品日韩欧美一区二区三区| 蜜芽资源高清在线观看| 色噜噜视频影院| 一个人的免费高清影院| 国产精品福利电影| 飘雪韩国在线观看免费高清完整版| 一天不停的插BB十几次| 国产性夜夜性夜夜爽91| 恋夜秀场支持安卓版全部视频国产 | 黄色天堂在线|