最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言之整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則詳解

 更新時(shí)間:2025年03月26日 09:31:03   作者:Peter_Deng.  
這篇文章主要介紹了C語(yǔ)言之整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C語(yǔ)言整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則

在 C 語(yǔ)言中,不同數(shù)據(jù)類型在運(yùn)算時(shí)會(huì)進(jìn)行 隱式類型轉(zhuǎn)換。

當(dāng) 有符號(hào)整數(shù)(int無(wú)符號(hào)整數(shù)(unsigned int浮點(diǎn)型(float、double 進(jìn)行運(yùn)算時(shí),編譯器會(huì)根據(jù)類型優(yōu)先級(jí)和轉(zhuǎn)換規(guī)則自動(dòng)調(diào)整運(yùn)算的數(shù)據(jù)類型

1. int 和 unsigned int 參與運(yùn)算時(shí)的轉(zhuǎn)換規(guī)則

當(dāng) intunsigned int 進(jìn)行運(yùn)算,運(yùn)算結(jié)果通常會(huì)轉(zhuǎn)換為 unsigned int,原因如下:

(1)無(wú)符號(hào)優(yōu)先(Unsigned Dominance Rule)

C 語(yǔ)言規(guī)定:

如果一個(gè)操作數(shù)是 int,另一個(gè)操作數(shù)是 unsigned int,并且它們具有相同的寬度(如 32 位),那么 int 會(huì)被提升為 unsigned int。

(2)示例

#include <stdio.h>

int main() {
    int a = -5;
    unsigned int b = 10;

    if (a < b) {  // a 會(huì)轉(zhuǎn)換為 unsigned int
        printf("a < b is true\n");
    } else {
        printf("a < b is false\n");
    }
    return 0;
}

輸出:

a < b is false

分析:

  • a-5int),b10unsigned int)。
  • a 在運(yùn)算前會(huì)被轉(zhuǎn)換為 unsigned int,-5 變?yōu)?4294967291(在 32 位系統(tǒng)下)。
  • 4294967291 > 10,所以 a < b 變成 false,與直覺相反。

(3)避免問題的方法

  1. 使用顯式類型轉(zhuǎn)換
if ((int)a < (int)b) {
    printf("Correct comparison\n");
}
  1. 避免 int unsigned int 混用
unsigned int a = 5;
unsigned int b = 10;
  1. 使用 size_t 進(jìn)行安全比較
    • size_t 是無(wú)符號(hào)整數(shù),適用于數(shù)組索引等情況。

2. unsigned int 和浮點(diǎn)數(shù) (float / double) 參與運(yùn)算時(shí)的轉(zhuǎn)換規(guī)則

當(dāng) unsigned intfloat / double 進(jìn)行運(yùn)算,運(yùn)算結(jié)果通常會(huì)轉(zhuǎn)換為 浮點(diǎn)型(float / double,原因如下:

(1)浮點(diǎn)類型優(yōu)先

C 語(yǔ)言規(guī)定:

如果一個(gè)操作數(shù)是 unsigned int,另一個(gè)操作數(shù)是 float double,則 unsigned int 會(huì)自動(dòng)轉(zhuǎn)換為 float / double

(2)為什么不轉(zhuǎn)換為 unsigned int?

  1. 浮點(diǎn)數(shù)的表示范圍比 unsigned int 更大

    • 32 位 unsigned int 的最大值為 42949672952^32 - 1)。
    • float 可表示 ~3.4 × 10^38,double 可表示 ~1.8 × 10^308
    • 浮點(diǎn)數(shù)可表示的范圍遠(yuǎn)遠(yuǎn)超過無(wú)符號(hào)整數(shù),因此轉(zhuǎn)換方向是 unsigned int → float/double,而不會(huì)反向轉(zhuǎn)換。
  2. 浮點(diǎn)數(shù)可以表示小數(shù),整數(shù)不行

    • 例如:5 / 2.0 = 2.5,如果轉(zhuǎn)換為 unsigned int,會(huì)丟失 .5,變成 2,這會(huì)導(dǎo)致精度損失。
    • 為了避免精度丟失,C 語(yǔ)言默認(rèn)將 unsigned int 轉(zhuǎn)換為 float double 進(jìn)行計(jì)算。

(3)示例

#include <stdio.h>

int main() {
    unsigned int a = 10;
    float b = 3.5;

    float result = a + b;  // `a` 轉(zhuǎn)換為 `float`
    printf("Result: %f\n", result); 

    return 0;
}

輸出:

Result: 13.500000

分析:

  • aunsigned int)被轉(zhuǎn)換為 float,變?yōu)?10.0f。
  • 計(jì)算 10.0f + 3.5f = 13.5f,結(jié)果類型為 float。

3. 類型轉(zhuǎn)換規(guī)則總結(jié)

運(yùn)算類型結(jié)果數(shù)據(jù)類型說(shuō)明
int + unsigned intunsigned intint 先轉(zhuǎn)換為 unsigned int,可能導(dǎo)致負(fù)數(shù)變大數(shù)
unsigned int + floatfloatunsigned int 先轉(zhuǎn)換為 float,然后計(jì)算
unsigned int + doubledoubleunsigned int 先轉(zhuǎn)換為 double,然后計(jì)算
unsigned int * floatfloatunsigned int 先轉(zhuǎn)換為 float,然后計(jì)算
unsigned int * doubledoubleunsigned int 先轉(zhuǎn)換為 double,然后計(jì)算

重點(diǎn)總結(jié)

  1. int unsigned int 運(yùn)算時(shí),int 會(huì)被轉(zhuǎn)換為 unsigned int

    • 負(fù)數(shù)可能變?yōu)槌笳龜?shù),導(dǎo)致邏輯錯(cuò)誤。
  2. unsigned intfloat/double 運(yùn)算時(shí),unsigned int 會(huì)轉(zhuǎn)換為 float/double

    • 避免精度損失,確保浮點(diǎn)計(jì)算的準(zhǔn)確性。
  3. 為了避免類型轉(zhuǎn)換問題,推薦

    • 統(tǒng)一變量類型,避免 intunsigned int 混用。
    • 明確使用 floatdouble 進(jìn)行浮點(diǎn)計(jì)算,不要依賴隱式轉(zhuǎn)換。
    • 使用 size_t 處理數(shù)組索引,避免 unsigned int 帶來(lái)的問題。

這些規(guī)則適用于 C 語(yǔ)言,也適用于 C++ 及其他類似的編程語(yǔ)言。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ ofstream與ifstream詳細(xì)用法

    C++ ofstream與ifstream詳細(xì)用法

    ofstream是從內(nèi)存到硬盤,ifstream是從硬盤到內(nèi)存,其實(shí)所謂的流緩沖就是內(nèi)存空間
    2013-07-07
  • C++?stack用法總結(jié)(示例詳解)

    C++?stack用法總結(jié)(示例詳解)

    std::stack?是?C++?標(biāo)準(zhǔn)模板庫(kù)(STL)中的容器適配器,它提供了棧(stack)的功能,基于其他序列容器實(shí)現(xiàn),下面給大家介紹std::stack?的用法總結(jié),感興趣的朋友一起看看吧
    2024-01-01
  • static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解

    static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解

    以下是對(duì)static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來(lái)參考下
    2013-09-09
  • 淺談c++ hook 鉤子的使用介紹

    淺談c++ hook 鉤子的使用介紹

    本篇文章主要介紹了淺談c++ hook 鉤子的使用介紹,詳細(xì)的介紹了c++ hook 鉤子的原理和運(yùn)行機(jī)制,有興趣的可以了解一下
    2017-11-11
  • C++入門語(yǔ)法之函數(shù)重載詳解

    C++入門語(yǔ)法之函數(shù)重載詳解

    這篇文章主要為大家詳細(xì)介紹了C++入門語(yǔ)法之函數(shù)重載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針)

    C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 電腦開機(jī)時(shí)間的計(jì)算代碼

    電腦開機(jī)時(shí)間的計(jì)算代碼

    這幾天我琢磨著一件事,那就是怎么計(jì)算我的PC從開機(jī)到現(xiàn)在的總時(shí)間。終于,看看這個(gè)函數(shù):GetTickCount();
    2013-05-05
  • Linux C/C++實(shí)現(xiàn)DNS客戶端請(qǐng)求域名IP的示例代碼

    Linux C/C++實(shí)現(xiàn)DNS客戶端請(qǐng)求域名IP的示例代碼

    DNS全稱:Domain Name System,域名解析系統(tǒng),是互聯(lián)網(wǎng)的一項(xiàng)服務(wù),本文主要介紹了C/C++如何實(shí)現(xiàn)DNS客戶端請(qǐng)求域名IP,感興趣的可以了解下
    2024-03-03
  • LeetCode題解C++生成每種字符都是奇數(shù)個(gè)的字符串

    LeetCode題解C++生成每種字符都是奇數(shù)個(gè)的字符串

    這篇文章主要為大家介紹了LeetCode題解C++生成每種字符都是奇數(shù)個(gè)的字符串示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • C++中使用mutable關(guān)鍵字的場(chǎng)景分析

    C++中使用mutable關(guān)鍵字的場(chǎng)景分析

    C++中的mutable關(guān)鍵字用于修飾類的成員變量,使其在const成員函數(shù)中可以被修改,它主要用于緩存、線程同步和調(diào)試等場(chǎng)景,以支持對(duì)象的邏輯常量性,在使用mutable時(shí),應(yīng)確保其修改不會(huì)破壞對(duì)象的外部表現(xiàn)狀態(tài),本文介紹C++中使用mutable關(guān)鍵字的場(chǎng)景分析,感興趣的朋友一起看看吧
    2025-02-02

最新評(píng)論

岐山县| 仪陇县| 武陟县| 铜梁县| 海盐县| 宣武区| 龙海市| 清远市| 邛崃市| 抚宁县| 荔波县| 福建省| 千阳县| 阳东县| 南充市| 土默特左旗| 绥棱县| 西昌市| 高州市| 曲阜市| 社旗县| 巴青县| 察哈| 定兴县| 将乐县| 哈尔滨市| 谷城县| 固镇县| 舞钢市| 新疆| 石台县| 门源| 诸暨市| 上饶市| 沭阳县| 息烽县| 金阳县| 凌云县| 类乌齐县| 葫芦岛市| 临沂市|