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

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

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

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

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

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

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

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

(1)無符號優(yōu)先(Unsigned Dominance Rule)

C 語言規(guī)定:

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

(2)示例

#include <stdio.h>

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

    if (a < b) {  // a 會轉(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)算前會被轉(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 是無符號整數(shù),適用于數(shù)組索引等情況。

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

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

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

C 語言規(guī)定:

如果一個操作數(shù)是 unsigned int,另一個操作數(shù)是 float double,則 unsigned int 會自動轉(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)超過無符號整數(shù),因此轉(zhuǎn)換方向是 unsigned int → float/double,而不會反向轉(zhuǎn)換。
  2. 浮點(diǎn)數(shù)可以表示小數(shù),整數(shù)不行

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

(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。
  • 計算 10.0f + 3.5f = 13.5f,結(jié)果類型為 float

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

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

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

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

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

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

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

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

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

相關(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)模板庫(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ū)別及用法詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

景德镇市| 阿荣旗| 垦利县| 江口县| 筠连县| 湖南省| 仁怀市| 宜都市| 商城县| 德兴市| 嵊州市| 莲花县| 遵义市| 台北县| 堆龙德庆县| 巴林右旗| 北辰区| 新河县| 定襄县| 视频| 叙永县| 桐梓县| 乐陵市| 常山县| 岳阳市| 柞水县| 栾城县| 平利县| 唐山市| 衡阳县| 师宗县| 金乡县| 内乡县| 临湘市| 南昌市| 霍州市| 鹿邑县| 三河市| 江川县| 繁峙县| 务川|