吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言里的整數數據類型

科技綠洲 ? 來源:網絡整理 ? 作者:網絡整理 ? 2023-11-24 16:09 ? 次閱讀

1. 整型數據類型

C語言里面的整數數據類型

類型名稱C語言中的關鍵字注釋
字符型char表示一個很小的整數
短整型short表示一個不怎么大的整數
整型int生活中一般的整數都可以表示
長整型long較大的整數
加長整型long long非常大的整數

一個整數而已,為什么會需要定義這么多不同的類型出來呢?

計算機通過晶體管的開關狀態來記錄數據。它們通常8個編為一組,我們稱之為 字節 。而晶體管有開關兩種狀態,一個字節有8個晶體管,因此一個字節可以擁有2的八次方個不同的狀態。讓每一種狀態對應一個數值,這樣一個字節可以表示256個不同數值。

晶體管狀態二進制數值十進制數值
關關關關關關關關000000000
關關關關關關關000000011
關關關關關關000000102
關關關關關關開開000000113
10101010170
開開開開開開開開11111111255

要表示更大的數據范圍就需要更多晶體管。要知道在發明C語言的年代,計算機存儲資源是非常珍貴而稀缺的。如果只想表達0到100以內的數值,那么一個字節就足夠了,何必用兩個字節來存儲?

而如今,即使存儲資源已經較為豐富了,但是大部分的強類型語言,都延續了這個傳統。它們均提供了豐富的類型以供選用。而程序員在編寫代碼時,通常能預想到需要使用到的數據范圍的大小。這樣在處理一個數據時,可以從語言所提供的類型中選用最合適的類型來承載數據。

在C語言標準并未規定這些數據類型的大小范圍,具體的實現交由了編譯器和平臺決定。

2. 用sizeof關鍵詞來測量大小

int一樣,sizeof是C語言中的一個關鍵詞。它是英文size of連起來的合成詞。翻譯成中文就是什么東西的大小的意思。它能夠測量C語言各種實體所占用的字節大小。

如果我們想看int所占用的字節大小,可以這樣寫sizeof(int)。執行后這段代碼后,它的測量結果是一個整型。我們可以借助printf函數將測量結果顯示在控制臺上。我們現在可以假設sizeof返回的結果是int類型的,在printf函數中使用占位符%d。而更準確的用法,應該用%zu

測量int類型所占用的字節大小,并將結果打印在控制臺上的代碼如下:

printf("%dn", sizeof(int));

sizeof后面既可以跟 類型,也可以跟 變量、常量。

  1. 類型 ,測類型所占用字節的大小。
  2. 變量 ,測變量的類型所占用字節大小。
  3. 常量 ,測常量的類型所占用字節大小。

三種情況的示例代碼。

int a; 
printf("sizeof int = %dn", sizeof(int)); // 1.測類型所占用字節的大小 
printf("sizeof a = %dn", sizeof(a)); // 1.測變量的類型所占用字節大小 
printf("sizeof 123 = %dn", sizeof(123)); // 1.測常量的類型所占用字節大小

測試C語言提供的各種整型類型的大小

printf("sizeof char=%dn", sizeof(char));
printf("sizeof short=%dn", sizeof(short)); 
printf("sizeof int=%dn", sizeof(int));
printf("sizeof long=%dn", sizeof(long));
printf("sizeof long long=%dn", sizeof(longlong));

圖片結果:char,short,int,long,long long分別占用了1,2,4,4,8個字節。至此,我們已經得知了它們所占字節大小,并且驗證了可以表示越大范圍的數據類型所占用的字節越多。值得注意的是intlong均占用4個字節。這并未違反C語言標準,C語言標準規定高級別的類型取值范圍不得小于低級別的類型,但是它們可以是一致的。

3. 三位二進制表示的數值范圍

charshortintlonglong long分別占用了1,2,4,4,8個字節。而每個字節由8個晶體管組成,每個晶體管狀態我們稱之為位。那么charshortintlonglong long分別占用了8,16,32,32,64位。

太多的位不利于理解原理,暫時把問題簡化一下,試試看位數減少到3。然后,分析3位的組 合,它能表示多大范圍的數值.

晶體管狀態二進制數據十進制數據
關關關0000
關關0011
0102
開開0113
關關1004
1015
開開1106
開開開1117

三位二進制組成的數據類型,可以表達2的3次方也就是8個數值。如果從0開始,那么可以表達從0到7的 數據范圍。 得出結論 :如果不考慮負數,那么整型數據類型可以表達的數據范圍是 假設,位數為n,則數據范圍從【0】開始,到【2的n次方-1】的數值范圍。

負數怎么辦?我們需要 拿出一個位來作為符號位 。用來表示這個數據是正數還是負數。在IEEE標準中,這個符號位存在于二進制的最高位。用三位二進制來示范這種情況。

晶體管狀態二進制數據十進制數據
關關關0000
關關0011
0102
開開0113
開關關100-4
開關101-3
110-2
開開111-1

加上符號之后,現在取值范圍變為負4到3了。紅色字體的為最高位,最高位為1的表示負數。你可能會覺得有點奇怪,為什么3的二進制是011,而負3卻是101呢?如果簡單的加一個符號位,為什么不用111呢?那我們看看如圖中所示的3與負3相加的運算結果。

圖片

會驚奇地發現,用101來表示負3與用011表示的正3相加。結果為1000,但是由于僅有3位二進制來保 存數據,最高位1被丟棄了。結果為000,居然得到了正確的結果0。

4.數值的補碼表示法

時鐘是一個圓被分成了12個點,讓我們假設這個時鐘一步只能走一個整點。那么這個時鐘只有12種不同的模式,我們把12稱之為時鐘的模。

現在指針指向了5點,我們要讓指針回到0點。一個辦法是直接回退5個小時(5-5)。另一個辦法是繼續往前走7個小時(5+7)。

在第二種辦法中,5+7=12,而12剛好為時鐘的模,時鐘指向12的同時,也正好指向了0。要讓指針回到0點,只需要讓它加上模與當前的時間的差即可。

因此,指針回退5小時與指針前進7小時是等價的。我們可以用指針前進來代替指針后退。

將這種思想帶入到上面討論的三位二進制當中。三位二進制能表示8中不同的模式,因此它的 模 為8。要讓3回到0,我們可以讓3減去3,也可以讓3加上 模與3的差,即8-3=5。因此,我們可以把-3在三位二進制中用5的二進制101表示。

這種將用加法來等效減法的二進制表示法被稱之為補碼表示法。

正數的補碼就是其二進制本身。而正數對應的負數的補碼為:(模 - 正數)的二進制。

0000
0011
0102
負數模減去正數補碼0113
-48-4=4100100-4
-38-3=5101101-3
-28-2=6110110-2
-18-1=7111111-1

補碼表示法既通過最高位,區別了正數和負數。并且,巧妙地應用了溢出,所得到的計算結果也是正確的。類似于鐘表僅需要向前走就可以實現減法,計算機的電路設計中,也只需要設計加法電路。極大地簡化了計算機內部電路的復雜程度。

求一個正數對應的負數的補碼的第二種辦法:

  1. 先寫出這個正數的二進制。
  2. 從二進制的右邊開始,遇到第一個1之前,全都填0。
  3. 遇到第一個1之后,把1填下來。
  4. 1之后的全部取反。

從右往左:未遇到1填0,遇到1填1,然后全部取反

十進制0-1-2-3-4
整數二進制000001010011100
補碼000111110101100

5.各種整型類型的數值范圍是多少

類型sizeof大小二進制位數取值范圍算式取值范圍
char11×8 = 8位-[2的7次方] ~ +[2的七次方 - 1]-128 ~ +127
short22×8 = 16位-[2的15次方] ~ +[2的15次方 - 1]-32,768 ~ +32,767
int44×8 = 32位-[2的31次方] ~ +[2的31次方 - 1]-2,147,483,648 ~ +2,147,483,647
long44×8 = 32位-[2的31次方] ~ +[2的31次方 - 1]-2,147,483,648 ~ +2,147,483,647
long long88×8 = 64位-[2的63次方] ~ +[2的63次方 - 1]-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807

次方數比位數少一,是因為最高位被用去做符號位了。

6. 無符號整型

如果你確定你不會用到負數,那么請使用unsigned關鍵詞。表明這個數據類型,是不帶有符號位的。既然不帶有符號位了,那么原本留給符號位的那一個二進制位,可以用來表示數值。

類型sizeof大小二進制位數取值訪問算式取值范圍
unsigned char11×8 = 8位0 ~ +[2的8次方 - 1]0 ~ +255
unsigned short22×8 = 16位0 ~ +[2的16次方 - 1]0 ~ +65,535
unsigned int44×8 = 32位0 ~ +[2的32次方 - 1]0 ~ +4,294,967,295
unsigned long44×8 = 32位0 ~ +[2的32次方 - 1]0 ~ +4,294,967,295
unsigned long long88×8 = 64位0 ~ +[2的64次方 - 1]0 ~ +18,446,744,073,709,551,615
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4353

    瀏覽量

    86171
  • 晶體管
    +關注

    關注

    77

    文章

    9745

    瀏覽量

    138896
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137712
  • 數據類型
    +關注

    關注

    0

    文章

    236

    瀏覽量

    13662
  • 整數
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6551
收藏 人收藏

    評論

    相關推薦

    C語言中的基本數據類型

    C語言是非常重要的一門程序設計語言,學好C語言再去學習其他編程語言將變得很輕松,因為大部分
    發表于 04-26 17:33 ?2101次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的基本<b class='flag-5'>數據類型</b>

    C語言中基本數據類型、變量和常量的使用

    C語言中基本數據類型、變量和常量的使用
    發表于 08-18 16:42 ?2919次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中基本<b class='flag-5'>數據類型</b>、變量和常量的使用

    技術干貨驛站 ▏深入理解C語言:基本數據類型和變量

    C語言中,數據類型和變量是編程的基礎,也是理解更復雜概念的關鍵。數據類型決定了變量的內存分配、存儲范圍和操作方式,而變量則是存儲數據的容器
    的頭像 發表于 07-26 17:53 ?2271次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:基本<b class='flag-5'>數據類型</b>和變量

    Python中常用的數據類型

    數據類型是每種編程語言必備屬性,只有給數據賦予明確的數據類型,計算機才能對數據進行處理運算,因此,正確使用
    發表于 04-19 15:14

    FPGA中的VHDL語言數據類型和運算符

    VHDL 和其他高級語言一樣,具有多種數據類型。對大多數數據類型的定義兩者是一致的(例如整數型),但是也有一些數據類型是 VHDL 所獨有的
    發表于 09-10 10:09

    C語言數據類型有哪些?

    C語言數據類型(基礎類型+結構體)
    發表于 12-25 07:06

    C預處理與C語言基本數據類型

    指令表:注意:宏名的書寫由標識符與兩邊各兩條下劃線構成。C語言基本數據類型不同操作系統中數據類型所占字節數圖解數據類型的其他分類:變量常量(
    發表于 12-21 08:29

    淺析System Verilog中的整數數據類型

    ,從此大一統。另外,追隨潮流。SystemVerilog還支持了面向對象的特性,以支撐功能驗證環境的模塊化和可重用需求。Integer Data Types整數數據類型可以不同維度進行劃分
    發表于 10-11 14:15

    C程序的運行環境和C語言數據類型

    ⒈ 實驗目的⑴ 了解在具體的語言環境下如何編輯、編譯、連接和運行一個C程序。⑵ 通過運行簡單的C程序,初步了解C源程序的特點。⑶ 掌握C
    發表于 06-21 09:36 ?55次下載

    C語言數據儲存與數據類型類型轉換的詳細資料說明

    程序說到底就是對數據的處理,所以首先要弄清楚需要處理哪些數據,計算機如何存儲這些數據C語言根據需要,抽象出了一些基本
    的頭像 發表于 02-24 15:39 ?4024次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>數據</b>儲存與<b class='flag-5'>數據類型</b>及<b class='flag-5'>類型</b>轉換的詳細資料說明

    C語言-基本數據類型與位運算

    這篇文章作為基礎知識點,總結C語言的基本數據類型有哪些,浮點數的精度,整數變量的空間范圍,變量定義語法,變量命名規則,浮點數打印格式,基本數據類型
    的頭像 發表于 08-14 09:56 ?1636次閱讀

    C語言數據類型-2

    對于一個計算機程序,它所做的所有運算的本質都是數據的處理。但是數據的樣式并不單一,因此就有了各種各樣的數據類型。在C語言中,為了處理這些復雜
    的頭像 發表于 02-21 14:44 ?832次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>數據類型</b>-2

    基本數據類型分享

    基本數據類型 基本數據類型:包括位、位序列、整數、浮點數、日期時間。此外字符也屬于基本數據類型,請參見文檔String與WString。 1.位和位序列 2.
    的頭像 發表于 06-13 14:14 ?1w次閱讀
    基本<b class='flag-5'>數據類型</b>分享

    plc數據類型怎么理解和應用

    的PLC程序的關鍵。 PLC數據類型的基本理解 PLC數據類型是指用于存儲和表示數據的方式,它們可以區分為不同類型數據元素。根據
    的頭像 發表于 12-19 11:39 ?4542次閱讀

    C語言數據類型有哪些

    C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    發表于 03-20 10:56 ?515次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>數據類型</b>有哪些
    百家乐官网的出千手法| 利高| 百家乐官网园选| 8彩娱乐| 澳门百家乐规则视频| 凤台县| 百家乐厅| 网络百家乐官网网站| 大发888游戏官方下载客户端 | 百家乐官网园有限公司| 兰考县| 爱赢百家乐的玩法技巧和规则 | 索雷尔百家乐官网的玩法技巧和规则| 网上赌球| 百家乐真钱斗地主| 尊龙百家乐官网娱乐网| 信誉棋牌游戏| 百家乐书包| 百家乐官网免费赌博软件| 顶级赌场官方安卓版手机下载| 百家乐庄闲出现几率| 百家乐官网赌场论坛在线| 现金博彩网| 百家乐反缆公式| 新濠峰百家乐官网的玩法技巧和规则| 姚记娱乐城网站| 名人百家乐的玩法技巧和规则| 代理百家乐官网试玩| 杭锦后旗| 大发888游戏大厅下载| 百家乐游戏规则介绍| 百家乐官网马渚| 蓝盾网上娱乐| 威尼斯人娱乐城求助| 百家乐官网技巧| 玩百家乐官网技巧博客| 凌龙棋牌游戏大厅| 百家乐视频游戏掉线| 东阳市| 大发888怎么样| 怎么玩百家乐的玩法技巧和规则|