C语言学习(七)数据类型 整数篇

本文深入探讨了C语言中的基本数据类型,包括整数、浮点数、逻辑和指针类型,详细解释了它们在内存中的占用和表达方式。特别关注整数在计算机内部的二进制和补码表示,以及不同类型数据的范围和格式化输入输出方法。

这里主要讲了C语言的基本数据类型分类、内存占用,并且主要学习了关于整数的计算机内部表达,类型选择等。

1. C语言数据类型:

① 整数
char short int long
② 浮点数
float double
③ 逻辑
bool
④ 指针
⑤ 自定义类型

2. 类型的不同

类型名称:int long double
输入输出的格式化:%d、%f、%ld、%lf
所表达的数的范围:char<short<int<folat<double
所占内存大小:1个字节到16个字节
内存中的表达形式:二进制(补码)、编码

sizeof运算符:
给出某个类型或变量在内存中所占据的字节数
sizeof(int)
sizeof(i)

例1:计算占据内存大小

int main()
{
	printf("sizeof(int)=%ld\n",sizeof(int));
	printf("sizeof(char)=%ld\n",sizeof(char));
	printf("sizeof(short)=%ld\n",sizeof(short));
	printf("sizeof(double)=%ld\n",sizeof(double));
	printf("sizeof(long)=%ld\n",sizeof(long));
	printf("sizeof(float)=%ld\n",sizeof(float));
	return 0;
}

可以得到各个数据类型所占字节如下:
在这里插入图片描述
3. 整数在计算机内部的表达

计算机内部一切都是二进制
如18-> 00010010

对于负数的表示,我们考虑0表示为00000000,1表示为00000001,要什么和1相加为0呢?我们可以知道11111111+00000001=100000000,所以-1表示为11111111.

这里就是用到了补码,11111111当做二进制为255,当做补码就是-1。
同理对于-a,其补码是2^n-a,n表示这种类型的位数。

4. 数的范围

对于一个字节(8位),可以表达的是:
00000000-11111111

其中
000000000表示0
11111111-10000000当做补码表示-1~-128
000000001-01111111当做纯二进制数表示1~127

例2:数的范围


int main()
{
	char c=255;
	//11111111
	int i=255;
	//00000000 00000000 00000000 11111111
	printf("c=%d,i=%d\n",c,i);
	return 0;
}

得到结果为:
在这里插入图片描述
对于char类型,它只有一个字节,所以11111111表示一个负数,而int类型则前面还有很多填充位为0,所以它表示一个正数。

正数范围具体情况如下:
char:1字节:-128 ~ 127
short:2字节:-32768 ~ 32767
int:取决于编译器,表示“ 1个字”
long:4字节

范围计算:-2^n ~ 2^n-1

unsigned的使用:
如果我们要表示纯二进制,而不是补码,就需要用unsigned
其作用是表达的范围少了负数部分,但其正数表达范围扩大了一倍

将代码改为:

unsigned char c=255;

得到结果为
在这里插入图片描述
5. 整数的输入输出

只有两种形式:int或long long
%d : int
%u : unsigned
%ld : lobg long
%lu : unsigned long long

8进制与16进制
一个以0开始的数字字面是8进制
一个以0x开头的数字字面是16进制
%o用于8进制;%x用于16进制

6.整数类型的选择

如果没有特别需要,都使用int类型,今天的计算机每次读入1个字,每次计算也是1个字,所以占据内存更小的char和short也许不会更快。

unsigned与否只是在输出的时候会有不同,计算的时候也是一样的,所以没有必要的时候也就不需要使用unsigned了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值