tft每日頭條

 > 生活

 > c語言比較小的數字

c語言比較小的數字

生活 更新时间:2024-09-13 06:12:00

不知各位有木有想過,在C語言以及C 編程語言中我們最常用的數是啥?據本人不完全統計,“0”這個數字是首當其沖的[呲牙]。下面我們先來看看,在C語言中0能用來表示啥~

  • 作為整數:0就是數值為0的整數。
  • 作為浮點數:0就是數值為 0.0 的規格化浮點數表示。(-0.0表示為最高位的符号位為1,其餘位為0。比如 -0.0 的32位單精度浮點數的規格化表示為0x8000'0000。)
  • 作為關系表達式的值:0就是false);非零(通常指定為1)為true)。C語言中原本沒有引入布爾類型,因此任何一個可被轉換為一個關系表達式的表達式(比如整數表達式),均可用跟0比較來獲取最終關系表達式的結果值。比如:

if(100) { } // 這裡相當于:if(100 != 0) { },因此條件為真 if(0.5) { } // 這裡相當于:if(0.5 != 0) { },因此條件為真 if(NULL) { } // 這裡相當于:if(NULL != 0) { },因此條件為假

  • 作為字符:0就表示為空字符'\0')。這不單單适用于ASCII碼,其他編碼格式均遵循這一規則。這也使得我們判定任何一種編碼格式的字符串是否結束,均能用0來進行判讀~
  • 作為指針值:0表示為空指針NULL)。C語言中通常把 NULL 定義為 (void*)0;而C 中通常直接定義為 0
  • 而在C 中,對一個類成員虛函數的聲明後面賦值為0,表示将該虛函數為純虛函數。

因此 0 在C語言中可被表示為任何一種基本類型。它是名副其實的“百搭”~[偷笑]當然,這也得感謝于其他一些标準(比如IEEE754規格化浮點數标準對0表示的定義)對0賦予了非常統一的語義。因此,不光光是在C語言中,而且在其他大部分主流編程語言中,0 在數值上表示為0,對于布爾值表示為,對于字符表示為空字符、對于指針(或引用)表示為空指針!這意味着什麼呢?0可以對任何基本類型進行初始化!我們下面看以下代碼:

c語言比較小的數字(C語言中萬能又神奇的數字)1

對結構體對象初始化為全零

有了上面對0的認識,那我們下面來舉一個例子,如何利用0來快速對一個結構體對象對其所有成員初始化為0。

通常古老的做法是聲明一個結構體對象,然後調用 memset 将其成員清空。而從C99開始,我們可以用初始化器将其成員輕松清0,代碼幹淨整潔,而且編譯器還能方便通過使用SIMD指令優化清零操作。我們看以下代碼:

c語言比較小的數字(C語言中萬能又神奇的數字)2

上述代碼中,假如我們使用了GNU語法擴展(比如指定了-std=gnu99或-std=gnu11),那麼 { 0 } 可直接用 { } 表示,裡面的0可省。

下面我們來檢驗一下,上述代碼中的objS和objT的每個成員是否真的都為0了。

c語言比較小的數字(C語言中萬能又神奇的數字)3

通過調試器我們可以簡潔又清楚地看到,objS和objT這兩個對象的所有成員确實被清零了。是不是非常方便?[憨笑]

其他常用的庫對0的定義

我們在寫代碼時常常會将 0 作為一個無效值進行處理。而不少開源庫以及其他一些标準庫常常會将 0 作為“返回正常值”的錯誤碼。比如,OpenCL中表示成功狀态碼的 CL_SUCCESS 就被定義為0;Vulkan API中表示成功狀态碼的 VK_SUCCESS 也被定義為0;還有CUDA中表示成功狀态碼的 cudaSuccess 也被定義為0。因為與0進行比較對于主流處理器而言非常方便靈活,有時候可優化為直接對計算結果做ZF标志位的判定即可,連 CMP TEST 這種比較指令都不需要用。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved