c语言数据基础知识

一、数据类型及其所对应的占位符(转换说明)

1.int型

整数型,int型变量所储存的数据是整数。

占位符(转换说明):%d(十进制)

2.short型(又叫short int型)

整数型加上附属修饰关键字:short ,short型变量所储存的数据是整数,一般是比较小的整数,有利于节省空间,增加运算速度。

占位符(转换说明):%hd(十进制)

3.long型(又叫long int型)

整数型加上附属修饰关键字:long ,long型变量所储存的是整数,一般是比较大的整数。

占位符(转换说明):%ld(注意是小写的L)(十进制)

4.long long型(又叫long long int型)

整数型加上附属修饰关键字:long long,long long型变量所储存的是整数,一般是特别大的整数。

占位符(转换说明):%lld(十进制)

5.unsigned型(又叫unsigned int型)

整数型加上附属修饰关键字:unsigned,unsigned型变量所储存的是非负整数,可以储存0和正整数,他的储存范围要大于int型。

占位符(转换说明):%u(十进制)

6.unsigned long型(又叫unsigned long int型)

整数加上附属修饰关键字:unsigned long,unsigned long型变量储存的是非负整数,可以储存0和正整数,他的储存范围比long型要大。

占位符(转换说明):%lu(十进制)

7.unsigned long long型(又叫unsigned long long int型)

其储存范围要比unsigned long型更大。

占位符(转换说明):%llu

8.unsigned short型(又叫unsigned short int 型)

其储存范围要比short大。

占位符(转换说明):%hu

9.double型

double型变量储存的是浮点数(小数)。

浮点数的两种写法:(1) 1.3455 -3.456

(2) 科学计数法:3.45e34(表示3.45乘十的34次方) 3.43e-4(表示3.43乘十的负4次方)

占位符(转换说明):%f(十进制,默认保存6位小数) %.nf(十进制,保存n位小数)

%e (显示为科学计数法型)

*无论是科学计数法型的还是普通型的,使用%e、%f这两个转换说明就能进行转换。

//显示科学计数法型的浮点数
#include <stdio.h>

int main(void)
{
double gego=3.45e4;

printf("按照科学计数法显示gego=%e\n",gego);
printf("按照一般情况显示gego=%f\n",gego);

return 0;
}
//这个程序说明,只要是浮点数,无论是科学计数法型的还是普通型的,使用%e、%f这两个转换说明就能进行转换。

 

10.long double型

浮点型加上附属修饰关键字long,long double型变量储存的是浮点数,储存范围要大于double型。

占位符(转换说明):%Lf(十进制,注意L要大写,默认保存6位小数) %.nLf(十进制,保存n位小数)

%Le(显示为科学计数法型)

11.char型(重点)

我们把char类型理解为微整数类型,也就是char类型储存数据的形式是整数形式,对于char类型来说,转换说明以及ASCII码至关重要。

char类型可以根据不同的转换说明(%d转换成整数型显示,%c转换成字符型显示)来显示不同的形式。

char类型可以显示的字符类型是ASCII码中的所有字符。但是如果要显示字符时,只能显示一个。

如果使用字符来对char类型进行赋值或者初始化时,需要使用单引号' '

通过以下代码来了解不同情况下的char类型:

情况一:对char类型进行赋值或者初始化

//重新定义char类型,char类型是微整数类型,取值范围是0~127
#include <stdio.h>

int main(void)
{
char choice=65;//由于char类型叫微整数类型,所以我对char类型的choice赋值为65,则choice中储存的数据就是65

char name='a';//这里我对char类型赋值的是a,a是一个字符,由于char是微整型,因此a需要转换成相应的ASCII码,即97,因此
//此时name储存的数据是97

printf("choice转换为字符为:%c\n",choice);//使用%c这个转换说明,就可以把char类型变量以字符的形式打印出来,65在ASCII码中对应的是大写
//的A,因此printf()函数会将A打印出来。
printf("以ASCII码的形式显示变量name:%d\n",name);//使用%d这个转换说明,就可以把char类型变量以整数的形式打印出来,name储存的是97,
//所以直接将97打印出来。

return 0;
}

情况二:通过输入函数getchar()、scanf()等函数键入char类型

//通过输入型函数来理解char类型:微整数类型
#include <stdio.h>

int main(void)
{
char choice=getchar();//键入6
getchar();
printf("%c\n",choice);//有人会产生疑问,为什么在键入一个数字后输出的依旧是一个数字,而不是ASCII码中对应的字符,其实是这样的,因为
//ASCII码中的字符包括0~9,也就是0~9除了属于ASCII码中数字的部分,也属于ascii码中字符的部分,由于getchar()函数是字符输入函数,
//他只会接受字符,并不会接受整数,所以他会把这个6当成字符来存储,数字字符6在ASCII码中对应的十进制数字是54,因此getchar()函数的
//返回值是54,所以char类型变量choice储存的数据是:54
//在printf()函数中,转换或明是%c,也就是说,以字符的形式打印choic这个变量,整数54对应的就是数字字符6,因此会打印一个数字字符6
printf("%d\n",choice); //转换说明是%d,也就是说,以整数的形式打印choice,所以直接打印出54

char name;
scanf("%c",&name);//键入6 其实对于scanf()函数有很多讲究,现在我们这个函数中的转换说明是%c,也就是字符形式,所以scanf()会自动
//将输入的数字当成是数字字符,因此将数字字符6储存在name中,数字字符6对应的整数是54,所以这个name实际上储存着54这个整数

printf("%c\n",name);//以字符的形式打印name这个变量,整数54对应的字符是数字字符6,因此打印出6
printf("%d\n",name);//以整数的形式打印name,所以直接打印54

char baby;
scanf("%d",&baby);//键入65 scanf()中过的转换说明是%d,也就是整数形式,因此,scanf()只能识别数字,他会把连续输入的数字
//当成一个整数,输入65,因此baby这个变量中储存的数据就是整数65
printf("%d\n",baby);//以整数的形式打印baby,直接打印出65
printf("%c\n",baby);//以字符的形式打印出baby,65对应的字符是大写字母:A,因此会将A打印出来。


return 0;
}

以上就是char类型(微整数型的全部理解)

 

12.char类型数组或者字符串类型

此类型能够储存多个字符,设置办法:

//char数组类型或者字符串类型的认识
#include <stdio.h>

int main(void)
{
char gege[20]="I'm a student.";/*[20]的意思代表的是这个变量的大小,
即20个字节,因为char规定一个字节储存一个字符,因此这个变量可以储存19个字符加一个空字符,正好20个*/

printf("%s\n",gege);

return 0;
}

注意,char类型数组或者字符串类型在赋值或者初始化时,一定不要丢掉双引号。

这两个类型的占位符(转换说明)都是:%s

13.可移植类型:

需要在增加inttypes.h这个头文件。

//inttypes.h头文件下的intN_t数据类型的使用 
#include <stdio.h>
#include <inttypes.h>//增加inttypes.h这个头文件

int main(void)
{
int32_t go=3454;

printf("%"PRId32"\n",go);

return 0;
}
1.intN_t型

N代表数据转化为二进制时的位数,也就是转化为二进制时的数据宽度,这个宽度是自己精确的。

image-20211124001359619

2.intmax_t(最大宽度类型)

image-20211124002033945

unintmax_t PRIuMAX SCNuMAX

上面这些表格中的说明符我们叫做:说明宏,使用方法%"PRIdMAX" 这就相当与一个转换说明。

系统所能分配的最大位数(数据转换成二进制时的位数)

二、计算机(CPU)的储存单元

1.位(bit)

一个位只能储存一个0或者一个1。

2.字节(byte)计算机中最经常出现的储存单元

一个字节包括8个位。

字节之间的转换(内存之间的转化):

1024B=1KB; 1024KB=1MB; 1024MB=1GB; 1024GB=1TB;

3.字

字也是计算机的储存单元,CPU的不同,字长也可能不同,有16位,32位,64位(但一定是2的整数次幂)

字同时也是计算机处理二进制数据的度量,一次处理一个字。

字长是计算机一次处理二进制数的位数,字长越大,计算机的处理能力越强。

三、常量与固定常量

1.常量

直接输入的数字就叫做常量:包括整数和浮点数和字符(这个字符一定要加单引号)以及字符串(一定要有双引号)。

可以直接将这些值写道printf()函数的待打印部分中,或者对变量进行赋值,对变量进行初始化,或者固定常量。

例如:

//字符常量以及字符串常量的使用
#include <stdio.h>

int main(void)
{
printf("%c\n%s",'D',"ARE GEE");

return 0;
}

 

2.固定常量

对于固定常量的名称,我们用大写字母,这样便于区分。

相对于变量可以随时进行初始化,赋值,以及scanf()函数键入更改,固定常量不能更改。

固定常量有两种方法:

(1)使用const关键字

设置形式如下:const <数据类型><常量名称><初始化> 这里的初始化是必须进行的。

(2)使用#define预指令(宏)

#define预指令的作用是在程序执行前,将预指令所包含的固定常量的值带入到程序中去。

//#define预指令的使用
#include <stdio.h>
#define GEEO "hello"
#define HYTT 34
#define JJU 34.5
#define KKI 'A'
//用大写名称作为固定常量的名称,变量后面只需要一个Tab键,不能添加=号,
//常量包括整数和浮点数和字符(这个字符一定要加单引号)以及字符串(一定要有双引号)。
int main(void)
{
printf("%s\n%d\n%f\n%c\n",GEEO,HYTT,JJU,KKI);

return 0;
}

 

四、十进制、八进制、十六进制

三种进制之间可以进行相互的转换,只需要改变printf()函数中的占位符(转换说明)就能完成。

1.十进制

数据类型的占位符同

2.八进制

为了便于区分,要在八进制数前加上前缀来进行区分:0(零)

八进制的整型同样是中的全部整型。

不同点:

(1.变量操作方面)

把占位符%d中的d全部换成o即%o,其余部分不变。

如果想让八进制前缀出现的话需要在占位符中加上#即%#o,其余部分不变。

(2.常量操作方面)

设置八进制的常量,要在其数字前面加上八进制前缀。

//八进制变量操作
#include <stdio.h>

int main(void)
{
int b=100;//这里面如果不加进制前缀的话,默认这是十进制

printf("以十进制的方式显示b=%d\n",b);
printf("以八进制的方式显示b=%o\n",b);//由于占位符中没有#,所以不会显示进制前缀
printf("以八进制的方式显示b=%#o\n",b);//会显示八进制前缀

int c=0333;//将八进制数333初始化给c
int d;
d=c+0432;//进行八进制间的加法运算,其中0432就是八进制常量,要包括前面的0前缀,不能省略

printf("以十进制显示d=%d,以八进制显示d=%#o",d,d);

return 0;

}
3.十六进制

为了便于区分,要在十六进制数前加上前缀来进行区分:0x(零和x)

十六进制的整型同样是中的全部整型。

不同点:

(1.变量操作方面)

把占位符%d中的d全部换成x即%x,其余部分不变。

如果想让十六进制前缀出现的话需要在占位符中加上#即%#x,其余部分不变。

(2.常量操作方面)

设置十六进制的常量,要在其数字前面加上十六进制前缀。

//十六进制变量操作
#include <stdio.h>

int main(void)
{
int b=100;//这里面如果不加进制前缀的话,默认这是十进制

printf("以十进制的方式显示b=%d\n",b);
printf("以十六进制的方式显示b=%x\n",b);//由于占位符中没有#,所以不会显示进制前缀
printf("以十六进制的方式显示b=%#x\n",b);//会显示十六进制前缀

int c=0x333;//将十六进制数333初始化给c
int d;
d=c+0x432;//进行十六进制间的加法运算,其中0x432就是十六进制常量,要包括前面的0x前缀,不能省略

printf("以十进制显示d=%d,以八进制显示d=%#x",d,d);

return 0;

}

 

 

 

posted @ 2021-12-17 16:18  OldSword-JY  阅读(727)  评论(0)    收藏  举报