C語言中的整數類型(short,int,long和long long)

整數是編程中最常見的一種數據類型,C語言提供了多種整數類型,包括?shortintlong?和?long long,它們的主要區別在于存儲范圍和內存占用的大小。

本節將詳細講解這些整數類型的定義、特性、使用場景以及注意事項,幫助你全面理解它們在 C語言中的作用。

C語言整數類型(short,int,long,long long)詳解 https://xiecoding.cn/view/416.html

C語言中的整數類型

C語言的整數類型用于存儲整數值,可以是有符號的(signed,默認情況,包含正數、負數和零)或無符號的(unsigned,僅包含非負數)。每種類型的大小(以字節為單位)和取值范圍由 C標準和具體實現(編譯器、硬件平臺)共同決定。

以下羅列了四種主要的 C 語言整數類型:

  • short:短整型,通常用于節省內存。
  • int:標準整型,是最常用的整數類型。
  • long:長整型,適用于需要更大范圍的場景。
  • long long:超長整型,提供最大的整數范圍(C99 引入)。

這些類型可以通過?signed?或?unsigned?修飾符調整,默認情況下是?signed。接下來,我們將逐一深入探討。

C語言short(短整型)

short?是一種較小的整數類型,通常占用 2 字節(16 位)。它的設計初衷是節省內存,適用于數據范圍較小的場景。

取值范圍
  • signed short:-32,768 到 32,767(-215?到 215-1)
  • unsigned short:0 到 65,535(0 到 216-1)
實例
#include <stdio.h>int main(void) {short a = 30000;unsigned short b = 60000;printf("Signed short: %hd\n", a);printf("Unsigned short: %hu\n", b);return 0;
}

輸出結果:

Signed short: 30000
Unsigned short: 60000

注意,在格式化輸出時,short?使用?%hd(有符號)或?%hu(無符號)。

C語言int(標準整型)

int?是 C語言中最常用的整數類型,其大小通常與處理器的字長一致(如 32 位系統上是 4 字節,64 位系統上可能是 4 或 8 字節)。它是默認的整數類型,適合大多數通用場景。

取值范圍(假設 4 字節)
  • signed int:-2,147,483,648 到 2,147,483,647(-231?到 231-1)
  • unsigned int:0 到 4,294,967,295(0 到 232-1)
實例
#include <stdio.h>int main(void) {int x = -1000000;unsigned int y = 4000000000U; // U 表示無符號常量printf("Signed int: %d\n", x);printf("Unsigned int: %u\n", y);return 0;
}

輸出結果:

Signed int: -1000000
Unsigned int: 4000000000

注意:無符號整數需要加后綴?U,否則可能觸發編譯器警告。輸出時使用?%d(有符號)或?%u(無符號)。

C語言long(長整型)

long?提供比?int?更大的范圍,至少占用 4 字節,在某些 64 位系統上可能是 8 字節。它的具體大小因平臺而異,因此在跨平臺編程時需謹慎。

取值范圍(假設 4 字節):
  • signed long:-2,147,483,648 到 2,147,483,647
  • unsigned long:0 到 4,294,967,295

若為 8 字節,則范圍擴展到 ±263?和 0 到 264-1。

實例
#include <stdio.h>int main(void) {long a = 1234567890L; // L 表示 long 常量unsigned long b = 4000000000UL;printf("Signed long: %ld\n", a);printf("Unsigned long: %lu\n", b);return 0;
}

輸出結果:

Signed long: 1234567890
Unsigned long: 4000000000

注意,long 類型的整數常量后加?L?或?UL,輸出使用?%ld(有符號)或?%lu(無符號)。

C語言long long(超長整型)

long long?是 C99 引入的類型,至少占用 8 字節(64 位),用于需要極大數據范圍的場景,如科學計算或大文件處理。

取值范圍
  • signed long long:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(-263?到 263-1)
  • unsigned long long:0 到 18,446,744,073,709,551,615(0 到 264-1)
實例
#include <stdio.h>int main(void) {long long a = -9223372036854775807LL; // LL 表示 long long 常量unsigned long long b = 18000000000000000000ULL;printf("Signed long long: %lld\n", a);printf("Unsigned long long: %llu\n", b);return 0;
}

輸出結果:

Signed long long: -9223372036854775807
Unsigned long long: 18000000000000000000

注意,long long 類型的整數常量使用?LL?或?ULL?后綴,輸出用?%lld(有符號)或?%llu(無符號)。

類型大小與平臺的依賴性

整數類型的大小并非完全固定,C 標準只規定了最小范圍和相對關系:short?≤?int?≤?long?≤?long long。實際大小取決于編譯器和硬件。例如:

類型32 位系統(字節)64 位系統(字節)
short22
int44(有時 8)
long44 或者 8
long long88

你可以使用?sizeof?操作符檢查具體大小

printf("Size of int: %zu bytes\n", sizeof(int));

使用場景與注意事項

  • 選擇合適的類型:根據數據范圍選擇類型,避免浪費內存或溢出。例如,小計數器用?short,大文件偏移量用?long long
  • 溢出風險:超出范圍會導致未定義行為。例如,short?從 32,767 加 1 可能變成 -32,768。
  • 跨平臺兼容性:使用?<stdint.h>?定義的固定寬度類型(如?int32_t)代替直接使用?int?或?long,以確保一致性。

總結

C語言的整數類型?shortintlong?和?long long?提供了從 16 位到 64 位的靈活選擇。通過理解它們的范圍、內存占用和使用場景,你可以在編程中做出更優決策。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72945.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72945.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72945.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用jcodec庫,訪問網絡視頻提取封面圖片上傳至oss

注釋部分為FFmpeg&#xff08;確實方便但依賴太大&#xff0c;不想用&#xff09; package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…

游戲引擎學習第147天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 上一集回顧 具體來說&#xff0c;我們通過隱式計算來解決問題&#xff0c;而不是像數字微分分析器那樣逐步增加數據。我們已經涵蓋了這個部分&#xff0c;并計劃繼續處理音量問題。不過&#xff0c;實際上我們現在不需要繼續處理…

使用Dockerfile打包java項目生成鏡像部署到Linux_java項目打docker鏡像的dockerfile

比起容器、鏡像來說&#xff0c;Dockerfile 非常普通&#xff0c;它就是一個純文本&#xff0c;里面記錄了一系列的構建指令&#xff0c;比如選擇基礎鏡像、拷貝文件、運行腳本等等&#xff0c;每個指令都會生成一個 Layer&#xff0c;而 Docker 順序執行這個文件里的所有步驟&…

Linux -- 磁盤結構、文件系統ext2

一、磁盤 1.磁盤的物理結構 2.磁盤的存儲結構 盤片&#xff1a;是機械硬盤存儲數據的主要介質&#xff0c;一般由鋁合金或玻璃等材料制成&#xff0c;表面涂有一層磁性材料。數據通過磁頭在盤片的磁性涂層上進行磁化來記錄&#xff0c;磁化的不同方向代表二進制的 0 和 1。盤面…

標量、向量、矩陣與張量:從維度理解數據結構的層次

在數學和計算機科學中,維度描述了數據結構的復雜性,而標量、向量、矩陣、張量則是不同維度的數據表示形式。它們的關系可以理解為從簡單到復雜的擴展,以下是詳細解析: 1. 標量(Scalar):0維數據 定義:單個數值,沒有方向,只有大小。 維度:0維(無索引)。 示例: 溫度…

點云數據處理--splat轉3dtiles

文章目錄 處理流程簡介核心功能實現數據讀取與格式轉換定義Point類數據讀取splat轉gltf 點云數據分割定義四叉樹遞歸生成3dtiles瓦片 生成tileset.json遞歸生成tileset.json計算box 主函數調用渲染 下一步工作性能優化渲染效果調優其他 源碼地址&#xff1a; github 處理流程簡…

OneM2M:全球性的物聯網標準-可應用于物聯網中

OneM2M 是一個全球性的物聯網(IoT)標準,旨在為物聯網設備和服務提供統一的框架和接口,以實現設備之間的互操作性、數據共享和服務集成。OneM2M 由多個國際標準化組織(如 ETSI、TIA、TTC、ARIB 等)共同制定,目標是解決物聯網領域的碎片化問題,提供一個通用的標準,支持跨…

【Python 入門基礎】—— 人工智能“超級引擎”,AI界的“瑞士軍刀”,

歡迎來到ZyyOvO的博客?&#xff0c;一個關于探索技術的角落&#xff0c;記錄學習的點滴&#x1f4d6;&#xff0c;分享實用的技巧&#x1f6e0;?&#xff0c;偶爾還有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原創??&#xff0c;感謝支持??&#xff01;請尊重原創&#x1…

Java爬蟲獲取淘寶商品詳情數據的完整指南

在電商領域&#xff0c;獲取商品詳情數據對于市場分析、價格監控、用戶體驗優化等場景具有重要意義。淘寶作為國內領先的電商平臺&#xff0c;提供了豐富的API接口供開發者使用&#xff0c;其中item_get和item_get_pro接口可以用來獲取商品的詳細信息。本文將詳細介紹如何使用J…

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_init_cycle 函數

nei聲明在 src/core/ngx_cycle.h ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);實現在 src/core/ngx_cycle.c ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle) {void *rv;char **senv;ngx_uint_t i, n;ngx_log_t …

qt 操作多個sqlite文件

qt 操作多個sqlite文件 Chapter1 qt 操作多個sqlite文件1. 引入必要的頭文件2. 創建并連接多個SQLite數據庫3. 代碼說明4. 注意事項 Chapter2 qt 多線程操作sqlite多文件1. 引入必要的頭文件2. 創建數據庫操作的工作線程類3. 在主線程中創建并啟動多個工作線程4. 代碼說明5. 運…

最新版本WebContext構造函數-避坑

import org.thymeleaf.context.IWebContext; import org.thymeleaf.context.WebContext; 當你想把頁面信息全部獲取出來存到redis緩存中使用時&#xff0c;SpringWebContext在Spring5中報錯 SpringWebContext ctx new SpringWebContext(request, response,request.getServlet…

用Python分割并高效處理PDF大文件

在處理大型PDF文件時&#xff0c;將它們分解成更小、更易于管理的塊通常是有益的。這個過程稱為分區&#xff0c;它可以提高處理效率&#xff0c;并使分析或操作文檔變得更容易。在本文中&#xff0c;我們將討論如何使用Python和為Unstructured.io庫將PDF文件劃分為更小的部分。…

neo4j隨筆-將csv文件導入知識圖譜

目錄 導入前的準備 導入csv文件 導入nodes1.1.csv并動態為節點添加標簽 ?編輯導入relations1.1.csv并動態為關系添加標簽 結果 導入前的準備 我有兩個csv文件 nodes1.1.csv存放節點信息,用記事本打開&#xff0c;能正常顯示&#xff0c;且編碼為UTF-8&#xff0c;就可以…

cpu 多級緩存L1、L2、L3 與主存關系

現代 CPU 的多級緩存&#xff08;L1、L2、L3&#xff09;和主存&#xff08;DRAM&#xff09;構成了一個層次化的內存系統&#xff0c;旨在通過減少內存訪問延遲和提高數據訪問速度來優化計算性能。以下是對多級緩存和主存的詳細解析&#xff1a; 1. 緩存層次結構 現代 CPU 通…

C++:入門詳解(關于C與C++基本差別)

目錄 一.C的第一個程序 二.命名空間&#xff08;namespace&#xff09; 1.命名空間的定義與使用&#xff1a; &#xff08;1&#xff09;命名空間里可以定義變量&#xff0c;函數&#xff0c;結構體等多種類型 &#xff08;2&#xff09;命名空間調用&#xff08;&#xf…

Python的學習篇(七)--網頁結構

七、網頁&#xff08;HTML&#xff09;結構 7.1 HTML介紹 HTML(Hyper Text Markup Language)&#xff0c;超文本標記語言。 超文本&#xff1a;比文本的功能要強大&#xff0c;通過鏈接和交互式的方式來組織與呈現信息的文本形式。不僅僅有文本&#xff0c;還可以包含圖片、…

*VulnHub-FristiLeaks:1.3暴力解法、細節解法,主打軟硬都吃,隧道搭建、尋找exp、提權、只要你想沒有做不到的姿勢

*VulnHub-FristiLeaks:1.3暴力解法、細節解法&#xff0c;主打軟硬都吃&#xff0c;隧道搭建、尋找exp、提權、只要你想沒有做不到的姿勢 一、信息收集 1、掃靶機ip 經典第一步&#xff0c;掃一下靶機ip arp-scan -l 掃描同網段 nmap -sP 192.168.122.0/242、指紋掃描、端口…

PHP:格式化JSON為PHP語法格式

1. 原生函數 $arr [1,2,3,4]; $str var_export($a,true); var_dump($str); 2. 自定義方法 class Export{private static $space;private static function do($a, string $prev){$res ;$next $prev . self::$space;if (is_array($a)) {$res . [;foreach ($a as $k > $…

【Python 數據結構 9.樹】

我裝作漠視一切&#xff0c;其實我在乎的太多&#xff0c;但我知道抓得越緊越容易失去 —— 25.3.6 一、樹的基本概念 1.樹的定義 樹是n個結點的有限集合&#xff0c;n0時為空樹。當n大于0的時候&#xff0c;滿足如下兩個條件&#xff1a; ① 有且僅有一個特定的結點&#xff…