1. 程式人生 > >C語言資料型別佔用位元組大小

C語言資料型別佔用位元組大小

在昨天的筆試的時候碰到了一個關於不同的資料型別佔用位元組大小的問題,於是就想歸納整理一下關於這方面的問題。於是就寫了一下,在Linux系統下用gcc編譯驗證了一下,以供參考。

16位編譯器:

char/unsigned char :1位元組
char *:2位元組
short int:2位元組
int/unsigned int:2位元組
long int:4位元組
float:4位元組
double:8位元組

32位編譯器:
char/unsigned char :1位元組
char *:4位元組
short int:2位元組
int/unsigned int:4位元組
long int:4位元組
float:4位元組
double:8位元組
long long:8位元組
long double:12位元組

64位編譯器:
char/unsigned char :1位元組
char *:8位元組
short int:2位元組
int/unsigned int:4位元組
long int:8位元組
float:4位元組
double:8位元組
long long:8位元組

long double:16位元組


在上面我們也可以看到不管16/32/64位的編譯器,char、short int、float、double、long long這幾個型別佔用的位元組數都是相同的,比較特殊的是long double在32位編譯器下佔用的位元組是12位。

型別/編譯器16位編譯器32位編譯器64位編譯器
void000
char111
char *248
short int222
int244
float444
double888
long448
long double81216
long long888


順便看了一下unsigned long int和unsigned int的區別:

在32位編譯器下,因為同佔4位元組,因此沒有取值範圍沒有區別


在64位編譯器下,unsigned long int佔8位元組,而unsigned int佔4位元組,就有區別了


由於我安裝的Ubuntu是64位版本的,因此想要生成32位的程式,需要安裝下面的庫

$ sudo apt-get install build-essential module-assistant  
$ sudo apt-get install gcc-multilib g++-multilib

相關推薦

C語言資料型別佔用位元組大小

在昨天的筆試的時候碰到了一個關於不同的資料型別佔用位元組大小的問題,於是就想歸納整理一下關於這方面的問題。於是就寫了一下,在Linux系統下用gcc編譯驗證了一下,以供參考。16位編譯器:char/unsigned char :1位元組char *:2位元組short int

C語言資料對應的位元組大小

16位編譯器 char :1個位元組 char*(即指標變數): 2個位元組 short int : 2個位元組 int: 2個位元組 unsigned int : 2個位元組 float: 4個

32位,64位編譯器下c語言資料型別對應位元組

一、程式執行平臺         不同的平臺上對不同資料型別分配的位元組數是不同的。         個人對平臺的理解是CPU+OS+Compiler,是因為:         1、64位機器也可以裝32位系統(x64裝XP);         2、32位機器上可以有16

c語言資料型別對應位元組數(32位,64位 int 佔位元組數)

一、程式執行平臺         不同的平臺上對不同資料型別分配的位元組數是不同的。         個人對平臺的理解是CPU+OS+Compiler,是因為:         1、64位機器也可以裝32位系統(x64裝XP);         2、32位機器上可以

C語言資料型別位元組

一、程式執行平臺        不同的平臺上對不同資料型別分配的位元組數是不同的。        個人對平臺的理解是CPU+OS+Compiler,是因為:        1、64位機器也可以裝32位系統(x64裝XP);        2、32位機器上可以有16/32位的

C語言基本資料型別對應位元組大小及printf函式輸出格式

補充說明:4位元組:int(%d),unsigned=unsigned int(%u),long=long int(%ld),unsigned long(%lu),float(%f)8位元組:double(%lf),unsigned long long(%llu),long

C語言資料型別所佔位元組

char :1個位元組 unsigned char :1個位元組 char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器) short : 2個位元組 unsigned short : 2個位元組 int:  4個位元組 unsigned in

C語言 資料型別輸入輸出函式(2018.11.17)

基本資料型別 5個方式瞭解基本型別 1、符號 2、位元組數 3、資料範圍 4、表示方法 5、運算方法 記憶體空間分配給變數,不是型別 指標型別:指標變臉中只能存放地址 空型別:主要用於資料型別的轉換和定義函式型別 void指標是萬用指標,萬用=無用,多數用於型別轉換後使用 限定性流程

C語言資料型別,運算子與表示式

1.C語言的關鍵字 32個關鍵字: auto:自動宣告      break:跳出當前迴圈      case:開關語句分支               &nbs

一、學習筆記,C語言資料型別

目錄 資料型別 基本資料型別 資料型別 基本資料型別 bool型別 使用bool型別 需要引入<stdbool.h> 型別bool的值域 型別名

4. C語言 -- 資料型別和取值範圍

本部落格主要內容為 “小甲魚” 視訊課程《帶你學C帶你飛》【第一季】 學習筆記,文章的主題內容均來自該課程,在這裡僅作學習交流。在文章中可能出現一些錯誤或者不準確的地方,如發現請積極指出,十分感謝。 也歡迎大家一起討論交流,如果你覺得這篇文章對你有所幫助,記得

C語言資料型別表示式相關知識(Linux)

#include<stdio.h> int main(int argc,char**argv) { printf(“Hello Word\n"); printf(“argv[%d],%s\n”,i,argv[i]); return 0; } 計算

C語言資料型別深度探測

C語言中的資料型別: 基本型別 – 整數型別 – 浮點型別 構造型別 – 陣列型別 – 結構體型別 – 共用體(聯合)型別 指標型別 空型別(void)

C語言資料型別

整形 Name Description Size* Range*signed: Range*unsigned: char Character or small integer. 1byte -128 to 127

有關c語言資料型別轉換之char,unsigned char,unsigned short

這是一道朗訊的筆試題(我把一些相關資料彙總了一下,希望大家能進來廣泛的探討,不甚感激!) #include <stdio.h> int main() {     char  ca;     unsigned char ucb;     unsigned shor

C#基礎資料型別位元組陣列(記憶體中的資料格式)相互轉換(BitConverter 類)

在某種通訊協議中(如 Modbus),可能需要把一些基本的資料型別記憶體中的表示形式轉換成以位元組陣列的形式,方便傳送。C/C++中可以利用指標等操作完成,但C#中沒有指標,咋辦呢?可以用BitConverter類啊。 1,把double型別轉換成byte陣列,float型別的話,在1234.5678後加

C語言------資料型別

C語言的資料型別有很多,為了突出主線,避免初學者一開始就因為接觸太多的資料型別陷入到繁瑣的語法當中,這裡只介紹整型和實數型。C語言程式處理的資料有常量和變數兩種形式。常量    在程式中不能改變的量。按著型別分為:整型常量(包括0在內)、實型常量、字元常量、字串常量、列舉常量

c語言資料型別與儲存

資料型別C語言中一般有以下常用的資料型別型別所佔位元組數取值範圍(unsigned取值範圍(signed)格式化輸出整形(int)2 or 4 16位機器是2,32位機器和64位機器是4 目前主流編譯器都是4位0~2^32-1-2^31~2^31-1%d短整形(short i

C語言資料型別儲存位置及堆疊說明

一、預備知識—程式的記憶體分配一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分1、棧區(stack)  由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2、堆區(heap)   般由程式設計師分配釋放, 若程式設計師不釋放

C語言資料型別的修飾符

概述:C語言操作物件是記憶體資源,對記憶體資源存放位置的限定 變數:在程式執行過程中其數值可以改變的資料 定義的一般形式: 儲存型別:資料型別變數名; 儲存型別:決定了變數的儲存位置 資料型別:決定了變數的儲存大小