C语言数据类型

1.C语言的本质

C语言的本质就是对内存的操作

2.内存的最小单位

内存操作的最小单位为字节,1个字节占8个bits位,可以用【7:0】bit表示。

在内存的每个字节都有一个唯一的地址,操作内存时本质就是通过地址进行访问的。

内存的抽象图:

image-20231214092233784

image-20231214092611204

3.C语言的数据类型

image-20230330175254766

4.整形数据类型

有符号整形:
		signed short
		signed int 
		signed long 
		signed long long
		注:对于有符号的整形,可以省略signed关键字
	
无符号整形:
		unsigned short
		unsigned int 
		unsigned long
		unsigned long long
		注:对于无符号的整形,不可以省略unsigned关键字

4.1  short类型(短整型)

short类型的数据在内存中占用2个字节的空间,共计16个bits,使用[15:0]bits表示。
	
	signed short类型的数据在内存中存储数据的范围:
		数据的最高位是符号位,signed short类型的数据[15]bit为符号位,
		符号位为0时,表示正数,符号位为1时,表示负数。
		数据范围:-32768(2^15) ~ 32767(2^15 - 1)

	unsigned short类型的数据在内存中存储数据的范围:
		unsigned short类型的数据没有符号位,最高位也是数据位。
		数据范围:0 ~ 65535(2^16 - 1)

最高位为符号位

image-20231214093901465

image-20231214093852339

4.2  int类型

int类型的数据在内存中占用4个字节的空间,共计32个bits,使用[31:0]bits表示。
	
	signed int类型的数据在内存中存储数据的范围:
		数据的最高位是符号位,signed int类型的数据[31]bit为符号位,
		符号位为0时,表示正数,符号位为1时,表示负数。
		数据范围:-2,147,483,648(2^31) ~ 2,147,483,647(2^31 - 1)

	unsigned int类型的数据在内存中存储数据的范围:
		unsigned int类型的数据没有符号位,最高位也是数据位。
		数据范围:0 ~ 4,294,967,295(2^32 - 1)

image-20231214094557333

4.3长整形(long)

32位操作系统:
	long类型的数据在内存中占用4个字节的空间,共计32个bits,使用[31:0]bits表示。
	
	signed long类型的数据在内存中存储数据的范围:
		数据的最高位是符号位,signed long类型的数据[31]bit为符号位,
		符号位为0时,表示正数,符号位为1时,表示负数。
		数据范围:-2,147,483,648(2^31) ~ 2,147,483,647(2^31 - 1)

	unsigned long类型的数据在内存中存储数据的范围:
		unsigned long类型的数据没有符号位,最高位也是数据位。
		数据范围:0 ~ 4,294,967,295(2^32 - 1)

64位操作系统:
	long类型的数据在内存中占用8个字节的空间,共计64个bits,使用[63:0]bits表示。
	
	signed long类型的数据在内存中存储数据的范围:
		数据的最高位是符号位,signed long类型的数据[63]bit为符号位,
		符号位为0时,表示正数,符号位为1时,表示负数。
		数据范围:-2^63 ~ 2^63 - 1

	unsigned long类型的数据在内存中存储数据的范围:
		unsigned long类型的数据没有符号位,最高位也是数据位。
		数据范围:0 ~ 2^64 - 1

4.4长长整形(long long)

long long类型的数据在内存中占用8个字节的空间,共计64个bits,使用[63:0]bits表示。
	
	signed long long类型的数据在内存中存储数据的范围:
		数据的最高位是符号位,signed long类型的数据[63]bit为符号位,
		符号位为0时,表示正数,符号位为1时,表示负数。
		数据范围:-2^63 ~ 2^63 - 1

	unsigned long long类型的数据在内存中存储数据的范围:
		unsigned long类型的数据没有符号位,最高位也是数据位。
		数据范围:0 ~ 2^64 - 1

5.字符型(char类型)

字符类型在内存中占用1字节的空间,共计8个bits,使用[7:0]bits表示。
	
	signed char类型的数据在内存中存储数据的范围:
		数据的最高位是符号位,signed char类型的数据[7]bit为符号位,
		符号位为0时,表示正数,符号位为1时,表示负数。
		数据范围:-128 ~ 127

	unsigned char类型的数据在内存中存储数据的范围:
		unsigned char类型的数据没有符号位,最高位也是数据位。
		数据范围:0 ~ 255

6.实型(浮点数)

    float : 单精度的浮点型,占用内存空间大小为4字节。
	double : 双精度的浮点型,占用内存空间的大小为8字节。
	
	float和double类型的数据在内存中存储时,采用的是科学计数的方式。

image-20231214101328433

image-20231214101635420

7.空类型(void类型)

void类型占用的内存空间大小为0字节。
在linux系统中使用sizeof(void)测试void类型的大小时,默认返回的值为1.
在linux系统中使用sizeof(void)测试大小时,返回1,1这个值只是占位,
实际上void类型的大小为0字节,因此系统并没有给void类型分配内存空间。
 

8.案例

使用sizeof运算符,计算数据类型占用内存空间的大小。


sizeof(数据类型)
        1> 如果是32位系统,sizeof()返回的是一个unsigned int类型的数据,
        使用%d格式化字符打印结果


        2> 如果是64位系统,sizeof()返回的是一个unsigned long类型的数据,
        使用%ld格式化字符打印结果

#include <stdio.h>

int main(int argc, const char *argv[])
{
	printf("short类型数据的大小 = %ld\n", sizeof(short));
	printf("unsigned short类型数据的大小  = %ld\n", sizeof(unsigned short));


	printf("int类型数据的大小 = %ld\n", sizeof(int));
	printf("unsigned int类型数据的大小  = %ld\n", sizeof(unsigned int));

	printf("long类型数据的大小 = %ld\n", sizeof(long));
	printf("unsigned long类型数据的大小  = %ld\n", sizeof(unsigned long));
	
	printf("long long类型数据的大小 = %ld\n", sizeof(long long));
	printf("unsigned long long类型数据的大小  = %ld\n", sizeof(unsigned long long));
	

	printf("char类型数据的大小 = %ld\n", sizeof(char));
	printf("unsigned char类型数据的大小  = %ld\n", sizeof(unsigned char));

	printf("float类型数据的大小 = %ld\n", sizeof(float));
	
	printf("double类型数据的大小 = %ld\n", sizeof(double));
	
	
	printf("void类型数据的大小 = %ld\n", sizeof(void));
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值