1. 程式人生 > >c語言資料型別與儲存

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 int) 20~2^16-1-2^15~2^15-1%hd
長整形(long int) 8(32位機器是4個)0~2^32-1-2^31~2^31-1%ld
雙長整形(long long int) 80~2^32-1-2^31~2^31-1%lld
字元型(char) 10~255(0~2^8-1)

-128~127

(-2^7~2^7-1)

%c
單精度浮點型(float)4%f
雙精度浮點型(double)8%lf

下面我們用程式來驗證一下上述概論

注意:一個位元組是8位

示例程式碼

#include<stdio.h>
int main()
{
int a=10;
short int b=5;
long int c=8;
long long int d =16;
char e='k';
float f=1.123456789;
double g=9.87654321123456789;

printf("a size is=%d,a value is=%d\n",sizeof a,a);
printf("b size is=%d,b value is=%hd\n",sizeof b,b);
printf("c size is=%d,c value is=%ld\n",sizeof c,c);
printf("d size is=%d,d value is=%lld\n",sizeof d,d);
printf("e size is=%d,e value is=%c\n",sizeof e,e);
printf("f size is=%d,f value is=%.10f\n",sizeof f,f);
printf("g size is=%d,g value is=%.17lf\n",sizeof g,g);

return 0;
}

輸出

a size is=4,a value is=10
b size is=2,b value is=5
c size is=4,c value is=8
d size is=8,d value is=16

e size is=1,e value is=k

f size is=4,f value is=1.1234568357

g size is=8,g value is=9.87654321123456747

我的編譯環境是64位機器。經過編譯,我們可以看到,輸出的位元組數和之前介紹的是一樣的

但是在看f和g的輸出的時候,我們發現f和g並沒有打印出正確的值,

原因是:

float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。

sizeof()函式表示返回一個物件或者型別所佔的記憶體位元組數。在這裡說一下sizeof和strlen的區別。

如果是求字串的位元組數,那麼sizeof所返回的位元組數包含結束符"\0",    而strlen不包含。

比如char a[]="hello";sizeof(a)的返回位元組數是6,strlen(a)返回的位元組數是5。

%.17lf和表示輸出雙精度浮點數的小數點後17位,如果是%30.17lf表示輸出的值所佔寬度為30,小數點位數佔17位。

---------------------------------------------分隔符-------------------------------------------------------

資料儲存

在計算機裡,首先我們知道 對於有符號正數,它的最高位是符號位,0是正,1是負。

正數:數值按原碼儲存(原碼是這個數本身的二進位制形式,而且正數的反碼和補碼都和原碼相同)

負數:數值按補碼儲存    -->反碼+1得到補碼    (反碼是原碼除最高位之外的其餘按位取反得到)

char A=128;    printf("%d\n",A); 輸出-128,為什麼是-128呢。    

char 字元型的儲存範圍是 (-128-127),在計算機中,

                                    (取反)                                    (+1)

 1000 0000 (128)(原碼)  --------->得到 1111 1111(反碼) ---------->得到1000 0000 (補碼) = -128

注意:1是符號位,代表負,所以是-128


相關推薦

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語言資料型別,運算子表示式

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

c++的基本資料型別儲存結構(學生筆記)

資料型別: 1.基本型別:整型(int,bool,enum),浮點型(float,double),字元型(char) 2.結構型別:陣列([ ]),結構(struct)聯合(union),類(class) 3.指標型別:(*) 4.空型別:(void) 整形根據示數範圍分為:短整形(sh

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

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

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

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

C語言資料結構演算法之深度、廣度優先搜尋

一、深度優先搜尋(Depth-First-Search 簡稱:DFS) 1.1 遍歷過程:   (1)從圖中某個頂點v出發,訪問v。   (2)找出剛才第一個被頂點訪問的鄰接點。訪問該頂點。以這個頂點為新的頂點,重複此步驟,直到訪問過的頂點沒有未被訪問過的頂點為止。   (3)返回到

C++學習筆記】三、C++的資料型別儲存以及基本運算

本文記錄了C++中的資料型別以及基本運算,這部分是典型的每次記每次忘型別,所以烙印在此,以便用時隨時查閱。 主要參考:http://www.runoob.com/cplusplus/cpp-data-types.html 1. C++中的資料型別 (1)基本型別 C++ 為程式

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

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

R 語言資料讀取儲存

一、R語言讀取文字檔案: 1、檔案目錄操作:getwd() : 返回當前工作目錄setwd(“d:/data”) 更改工作目錄 2、常用的讀取指令readread.table() : 讀取文字檔案read.csv(): 讀取csv檔案如果出現缺失值,read.

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

c語言資料型別、運算子和表示式

資料型別   1.基本資料型別: 基本資料型別最主要的特點是,其值不可以分解為其他型別。也就是說,基本資料型別是 自我說明的 2.構造資料型別: 構造資料型別是根據已定於的一個或多個數據型別用構造的方法來定義的。也就是說, 一個構造型別的值可以分解為若干個“成員”或“元素

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

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

C 語言資料型別意義解析

先給出一張書上關於資料型別的分類圖,其中對於指標型別和空型別做了不同的分類,具體原因請看下面的說明 關於C中的資料型別,個人的劃分方法是 分為兩類,一類是基本型別(地址型別也是基本型別的一種),