C语言数据类型

推荐浙大的MOOC网课,C语言程序设计 翁凯老师 编程软件使用的是Dev-C++,如果你不能翻墙下载的话,可以考虑其它
C语言的变量必须在使用前定义,并确定类型。不同的数据类型在内存中所占空间不同。
常用的数据类型:
整数:char,short,int,long,long long
浮点数:float, double,long double
逻辑(0,1):bool

Part 1整数类型

在赋值变量时,为了不发生溢出,就要了解一下每种数据类型表示的范围。

1.char

当然char也可以是字符类型,这里讨论整数类型。

char1字节 8位

char能表示的数的范围是-128到-1, 0到127
unsigned char 能表示的范围是0到255
由于补码存储,有一个有趣的现象:就是127+1=-128,-128-1=127,这图还是可以的吧,哈哈哈哈哈哈
在这里插入图片描述

#include<stdio.h>
int main()
{
	char a=-128-1;
	//1个字节 11111111=-1  10000000=-128 
	//00000000=0 01111111=127  
	//unsigned char 00000000-11111111 0-255
	printf("%d %d",a,b,sizeof(char));
	return 0; 
	
 } 

结果就是:
在这里插入图片描述
你可以自己试试。sizeof可以直接读到字节数。

2.int

对于int,我们用另一种方式算一下最大能表示多少吧。参见下面的程序:`

#include<stdio.h>
int main()
{
	//得到int 能表示最大数
	int a=0,b=0;
	while(++a>0) ;
	printf("the biggest number of type int is : %d\n",a-1);
	b++;
	while((a=a/10)!=0)
	{
		b++;
	}
	printf("the hightest layer of type int is :%d",b);
	return 0;
	
 } 
 /* %d int 
 	%u unsigned
 	%ld long long 
 	%lu unsigned long long */

当然这么机智的程序总是在我发明之前就有人写出来了,思想就是最大的整数+1会变成负数。
在这里插入图片描述
int 能表示的数与电脑内存大小有关,有的是4字节有的是8字节,取决于CPU和RAM直接最大传输位。我们平时定义不用多想,int is enough.

3.无符号数

平时还会涉及%u, unsigned int ,无符号数。还有补码的一个有趣的现象:
正数的补码和原码一样,该表示多大就多大,负数的开头都是1,具体转化…请自行查阅。

/* %d int 
 	%u unsigned int 
 	%ld long long 
 	%lu unsigned long long 
	 %e 科学计数法*/
#include<stdio.h>
int main()
{
	char c=-1;
	int d=-1;
	printf("c=%u,d=%u",c,d);
//在这一步不是unsigned int 格式的会被扩展为unsigned int
//char -1第一位是1,扩展后和int一样 
}

在这里插入图片描述

4.有效数字

关于有效数字和科学计数法:

include<stdio.h>
int main()
{
	double ff=1E-10;
	printf("%E,%.16f\n",ff,ff);
}
//int 有效数字7 
//double 有效数字15
//double 有时无法准确表达一个数字,0.0049 这是天生的
//double 会四舍五入 0.005 %.2f 0.01 

在这里插入图片描述
%.16f 使结果展示出16位
整数内容就到这里。

Part 2浮点数类型

float4字节 7位有效数字
double8字节 15位有效数字

涉及到inf,无穷大
nan 表示不存在的数
scanf一个double的数的时候一定是%lf
浮点数运算总是有一定误差,有一个误差范围。

#include<stdio.h>
int main()
{
	float a,b,c;
	a=1.345f;
	b=1.123f;//用f表明身份,带小数点的字面量是double 
	c=a+b;
	if (c==2.468)
		printf("相等!\n");
	else
		printf("不相等!%.10f,%f\n",c,c);
		//%f有进位操作,有效7位 
	if (fabs(c-2.468)<(1e-3))
		printf("误差小于1e-3!\n");
	else
		printf("误差大于1e-3!\n");//1e-8 1e-12就差不多相等了
 } 

在这里插入图片描述

Part3 字符配型

对于char,%c表示输出字符,%d输出ASCII码

#include<stdio.h>
int main()
{
	char c;
	char d;
	scanf("%c",&c);
	printf("c='%c'\n",c);
	printf("c=%d\n",c);
	return 0;
}

在这里插入图片描述
A+‘a’-'A’可以把小写字母变成大写
a+‘A’-'a’可以把大写字母变成小写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值