日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】四 C语言中的类型转换

發布時間:2023/12/10 pytorch 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶深度学习记录】四 C语言中的类型转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天學習C語言中的類型轉換,包括隱式類型轉換和顯示類型轉換

文章目錄

    • 1 C語言中的數據類型轉換
      • 1.1 強制類型轉換
        • 1.11 強制類型轉換代碼分析
      • 1.2 隱式類型轉換
        • 1.21 隱式類型轉換代碼分析
    • 2 總結

1 C語言中的數據類型轉換

C語言中,可以進行數據類型轉換。有以下兩種數據類型轉換:

  • 強制類型數據轉換
  • 隱式類型數據轉換

如下圖:

1.1 強制類型轉換

強制類型轉換的語法為:

  • (Type)var_name; //對某一個變量名進行強制轉換
  • (Type)value; // 對某一個值進行強制轉換

強制類型轉換的結果為:

  • 目標類型能夠容納目標值:結果不變
  • 目標類型不能容納目標值:結果將產生截斷

對于上面的轉換結果,應該大多數人能夠明白,因為目標類型如果占用的內存較小,那么就只能將被轉換的目標值的一部分數據保存起來,導致數據不完整。

注意:不是所有的強制類型轉換都能成功。當不能進行強制類型轉換的時候,編譯器將產生錯誤信息。

1.11 強制類型轉換代碼分析

如下代碼:

  • 4-1.c
#include <stdio.h>struct TS{int i;int j; };struct TS ts;int main(){short s = 0x1122;char c = (char)s;int i = (int)s;int j = (int)3.1415;unsigned int p = (unsigned int)&ts;//long l = (long)ts; //error//ts = (struct TS)l; //errorprintf("s = %x\n", s);printf("c = %x\n", c);printf("i = %x\n", i);printf("j = %x\n", j);printf("p = %x\n", p);printf("&ts = %p\n", &ts);return 0; }
  • 編譯運行結果為:

  • 上面的結果,c=22,是因為數據截斷,c只有一個字節,s占有兩個字節,將s的值強制轉換成char給c,只能保留低字節的一字節。所以c=22
  • 上述代碼都是進行強制類型轉換,但是第22和24行,是編譯期錯誤,這是因為不能將TS結構體類型強制轉換為long,以及不能講long類型強制轉換為TS結構體類型。
  • 所以,強制類型轉換,不一定都能成功

1.2 隱式類型轉換

隱式類型轉換是編譯器主動進行的轉換,不需要手動強制轉換。如下圖所示:

注意:

  • 低類型到高類型的隱式類型轉換是安全的,不會產生截斷
  • 高類型到低類型的隱式類型轉換是不安全的,會產生數據截斷,導致結果不正常

如下圖的隱式類型轉換方向,是安全的轉換方向:

我們知道強制類型轉換,它有特定的表達形式。那么,隱式類型轉換,一般發生在哪些地方呢?

隱式類型轉換的發生點:

  • 算數運算中,低類型轉換為高類型
  • 賦值表達式中,表達式的值轉換為左邊變量的類型
  • 函數調用時,實參轉換為形參的類型
  • 函數返回時,return表達式轉換為返回類型

1.21 隱式類型轉換代碼分析

看如下代碼:

  • 4-2.c
#include <stdio.h>int main(){char c = 'a';int i = c; // safeunsigned int j = 0x11223344;short s = j; // unsafeprintf("c = %c\n", c);printf("i = %d\n", i);printf("j = %x\n", j);printf("s = %x\n", s);printf("sizeof(c + s) = %d\n", sizeof(c + s));return 0;}
  • 編譯運行結果為:

上面的代碼,還是比較簡單的,印證了上面的四條隱式類型轉換發生的時間點。這里不再贅述

2 總結

  • 強制類型轉換由程序員來完成
  • 轉換可能產生截斷
  • 轉換不區分類型的高低
  • 轉換不一定都能成功,不成功時,編譯器,給出錯誤信息
    • 隱式類型轉換由編譯器自動完成
  • 低類型向高類型的轉換是安全的
  • 高類型向地類型的轉換是不安全的
  • 標準C編譯器的類型檢查是比較寬松的,因此,隱式類型轉換可能帶來意外的錯誤

    總結

    以上是生活随笔為你收集整理的【C语言进阶深度学习记录】四 C语言中的类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。