C語言數(shù)據(jù)類型還有哪些搞不明的
數(shù)據(jù)類型的介紹
在C語言中有豐富的數(shù)據(jù)類型描述現(xiàn)實中的數(shù)據(jù)
C語言將我們平時日常生活中的數(shù)據(jù)分成三種:整形類型 字符類型 浮點類型
- 整形類型
整形類型從名字可以聯(lián)想到什么?
整形
對就是這樣
在C語言中使用int表示整形類型,(源于整形的英文單詞integer)
//短整型 short [int] [signed] short [int] unsigned short [int] //整形 int [signed] int unsigned int //長整型 long [int] [signed] long [int] unsigned long [int] //更長的整形 //c99中引入 long long [int] [signed] long long [int] unsigned long long [int]
- 字符類型
字符包括字母,文字,符號等等都是字符
在C語言中用char表示(源于英文字母character)
char [signed] char unsigned char
- 浮點類型
小數(shù)點的浮動浮點類型
float double long double
- 布爾類型
區(qū)別于其他類型,是用來判斷真假的一種類型
C語言中原來并沒有為布爾值單獨設(shè)置一個類型,而是使用0表示假,非零表示真
在C99中引用布爾類型:true或者false
#define bool _Bool #define false 0 //假 #define true 1 //真
代碼演示
_Bool flag = true;
if (flag)
printf ("i like C\n"0);
這時候有人有疑問了這個int ,char ,double我都知道了,但是這個signed,unsigned還有long是什么意思,咋突然就出現(xiàn)了
首先我們來說一下long
這時候大家就要知道一個東西,每種數(shù)據(jù)類型都有自己的長度,接下來我們詳細(xì)說一下
各種數(shù)據(jù)類型的長度
每一種數(shù)據(jù)類型都有自己的長度,占用的內(nèi)存空間不同,使用合適的類型長度能夠節(jié)省內(nèi)存空間,加大開發(fā)效率
sizeof操作符sizeof是一個關(guān)鍵字,也可以是操作符,是用來專門計算類型長度的,單位是字節(jié)
接下來我們來看一下這些數(shù)據(jù)類型的具體長度
#include <stdio.h>
int main()
{
printf ("%zu\n",sizeof(_Bool));
printf ("%zu\n",sizeof(char));
printf ("%zu\n",sizeof(short));
printf ("%zu\n",sizeof(int));
printf ("%zu\n",sizeof(long));
printf ("%zu\n",sizeof(long long));
printf ("%zu\n",sizeof(float));
printf ("%zu\n",sizeof(double));
printf ("%zu\n",sizeof(long double));在VS2022 X64配置下的運行結(jié)果為:
1
1
2
4
4
8
4
8
8
另外還有一個表示長度的單位比字節(jié)更小,就是比特
1字節(jié)=8比特
由此我們可以的得到每個數(shù)據(jù)類型的長的度,這時候有的人可能會發(fā)現(xiàn)自己得出的結(jié)果不一樣
這是因為C語言規(guī)定sizof(long)>=sizof(int)所以有的配置環(huán)境下的結(jié)果是8sizeof(long double)>=sizeof(double)也是這樣了,在有些配置下的的結(jié)果是16
sizeof的操作符的操作數(shù)可以是類型,也可以是變量或者表達(dá)式,后面跟的是表達(dá)式的時候,括號可以去掉,
sizeof(類型) sizeof 表達(dá)式
sizeof后面的表達(dá)式不真實參與運算的,根據(jù)表達(dá)式的類型來得出大小
#include <stdio.h>
int mian()
{
short s = 12;
int b = 10;
prinrf("%zu\n",sizeof(s = b + 1 ));
printf("s = %d\n",s);
return 0;
}
運行結(jié)果為
2
s = 12
為什么呢?
首先無論等號后面的數(shù)字有多么大他都要放在這個short的這個空間里面,這個空間的字節(jié)大小是2,1的數(shù)據(jù)類型是int,b的類型也是int表達(dá)式不參與運算,等號右邊的類型是int,但int這個類型的長度是4不夠存放就直接截去,所以是2
而12由于sizeof后面的表達(dá)式不參與計算所以依然是12
signed 和 unsigned
C語言使用signed和unsigned關(guān)鍵字修飾字符型和整型類型的signed表示類型整形帶有正負(fù)號和零unsigned表示整形正整數(shù)和零
對于int類型,默認(rèn)是帶有正負(fù)號的也即是說signed int等同于sgned int
signed int a; //等同于int a;
想要只表示負(fù)數(shù)就要加unsigned聲明變量
unsigned int a;
聲明變量的好處是同樣長度的內(nèi)存能夠表示的最大整數(shù)類型擴大一倍
比如,16位的signed short int 的取值范圍是:-32768~32767,最大是32767;而unsigned short int的取值范圍是:0~65535,最大值增加到了65535。32位的siggned int的取值范圍可以參考limits.h中給的相關(guān)定義。
下面是在VS2022環(huán)境中,limits.h中的相關(guān)定義
#define SHRT_MIN (-32768) //有符號16位整型的最小值 #define SHRT_MAX 32767 //有符號16位整型的最大值 #define USHRT_MAX 0xfff //無符號16位整型的最大值 #define INT_MIN (-2147483647 -1) //有符號整型的最小值 #define INT_MAX 2147483647 ///有符號整型的最大值
unsigned int里面的int可以省略,所以也可以寫成
unsigned a;
字符類型char也有signed和unsigned
signed char c;//范圍為-128到127 unsigned char c;//范圍為0到255
注意,C語言規(guī)定char類型默認(rèn)是否包括符號是由當(dāng)前系統(tǒng)決定的
所以char不等同與signed char,可能是signed char也可能是unsigned char
這一點區(qū)別于int
到此這篇關(guān)于C語言數(shù)據(jù)類型還在搞不明白?的文章就介紹到這了,更多相關(guān)C語言數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中值傳遞時觸發(fā)拷貝構(gòu)造函數(shù)的完整過程
本文詳細(xì)介紹了C++中值傳遞時觸發(fā)拷貝構(gòu)造函數(shù)的完整過程,包括觸發(fā)拷貝構(gòu)造的時機、過程本質(zhì)以及如何避免觸發(fā)拷貝構(gòu)造,感興趣的朋友跟隨小編一起看看吧2025-12-12
c++如何控制對象的創(chuàng)建方式(禁止創(chuàng)建棧對象or堆對象)和創(chuàng)建的數(shù)量
這篇文章主要介紹了c++如何控制對象的創(chuàng)建方式和創(chuàng)建的數(shù)量,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
C語言實現(xiàn)學(xué)生個人消費管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言學(xué)生個人消費管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08

