C-数据和C

1.常量与变量数据

有些数据在程序使用之前预先设定,并在整个运行过程中没有变化,叫做常量。另外的数据在程序运行过程中可能变化或被赋值,叫做变量。

2.数据类型关键字

对于变量,编译器通过声明语句中指定的数据类型来判断其类型;对于常量,编译器通过其书写来辨认其类型。

C的数据类型关键字(12个):

K&R关键字:int,long,short,unsigned,char,float,double。

C90关键字:signed,void。

C99关键字:_Bool,_Complex,_Imaginary。

3.C全部基本数据类型

C基本数据类型分为两大类:整数类型,浮点数类型。(在计算机中的存储方式不同)

整型默认为有符号类型signed,可以unsigned修饰为无符号类型;浮点型都是有符号类型,不可用signed和unsigned修饰。

在基本数据类型所占空间大小的排列中,C语言只规定后者不小于前者,例如,在32位计算机中,int占32位,short占16位,long占32;float占32位,double占64位。

int(整型常量默认类型)

short = short int(修饰词➕int,int可省略)

long = long int

long long = long long int

 

unsigned = unsigned int

unsigned short = unsigned short int

unsigned long = unsigned long int

unsigned long long = unsigned long long int

 

char (技术实现上char是按整数类型存储的,有的机器上是signed型,有的是unsigned型)

signed char/unsigned char(用来表示小整数)

_Bool(按整数类型存储,只有两个值0,1,表示false,true)

 

float

double(浮点型常量默认类型)

long double

 

void

 

float_Complex(复数类型,包含两个float值,一个表示复数的实部,一个表示复数的虚部;下面类似)

double_Complex

long double_Complex

float_Imaginary(虚数类型;下面类似)

double_Imaginary

long double_Imaginary

4.位,字节,字

位(bit,b),是计算机存储的基本单位,是最小的存储单位,仅能表示两个值0,1(高低电位,两种状态)

字节(Byte,B),标准定义是1Byte=8bit,这种标准常用在衡量存储容量大小,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB,1EB=1024PB。

C语言中,char类型数据在内存中占用的位数就是一字节的位数。

字(word),对于给定的计算机设计,字是自然的存储单位。对于一个32位机,1字就是32位。一般int类型数据在内存中占有的位数等于一字。

5.整数与浮点数的存储

整数直接以对应二进制编码存储(不考虑原码,反码,补码)。浮点数表示法将一个数分为小数部分和指数部分分别存储(e计数法)。有符号型的还有符号位。

浮点数只是实际值的近似,一些算术运算中,使用浮点数会损失更多精度。

6.int

变量声明:

声明语句为变量创建,标定存储空间,并为其指定初始值。

int a;

int b;

int a, b;

变量赋值:

a = 10;(直接赋值)

scanf(“%d”,&b);(输入函数赋值)

int a=10, b=20;(初始化变量)

常量:

C把不含小数点和指数的数当作整数。C把大多数整数看作int类型。

前缀0表示八进制,0X表示十六进制;后缀U,unsigned型,后缀L,long型,后缀LL,long long型。

打印:

printf(“%d,%o,%#o”,a,b,b);转换说明符与变量个数和类型必须一一匹配。

转换说明符:

%[-][数字串[.数字串]]字母

-表示左对齐

左数字串(域宽),表示输出的最小宽度,不够左补空

右数字串(精度),表示小数点后保留的位数,多截少右补零

 

%d 转换为带符号的十进制数输出

%hd

%ld

%u 不带符号的十进制数输出

%lu

%o 不带符号的八进制数输出

%#o 显示0前缀

%x 不带符号的十六进制数输出

%#x 显示0x前缀

%c 单个字符输出

%s 字符串输出

%f [-]mmmm.nnnnnn(无阶码浮点数)输出

%e [-]m.nnnnnn[+/-]kk(有阶码浮点数)输出

%g %f或%e格式中较短的一个

%% 表示%本身

 

在scanf()中,%字母间可加入域宽和抑制赋值符*

scanf(“%*4s%c”,&a);先读取域宽为四个字符的字符串丢弃,然后读取一个字符,赋值给变量a。

 

整数溢出问题:

整数太大,超出了整数类型的表示范围,造成整数溢出。C语言规定了无符号整数溢出规则:溢出到起始点。有符号整数溢出类似。

 

7.char

char类型的实际存储是整型,计算机采用一种数字编码,用特定的数字表示特定的字符。ASCII码,Unicode码。

C语言中把一个字节定义为char类型占用的位数。

声明:

char a,b;

常量:

‘A’,单个字符的书写用单引号括起来。

初始化:

char a=‘A’;

char a=65;

在ASCII码中,65表示‘A’,但不是所有系统采用ASCII码,所以建议使用字符常量,而不是数值编码。

对于非打印字符的表示,C提供了3中方法:ASCII码,转义字符,八进制和十六进制ASCII码(\0oo 八进制值,\xhhh 十六进制值)

注意数字和数字字符的区别。

转义字符:

\a 报警

\b 退格

\f 走纸

\n 换行

\r 回车

\t 水平制表符

\v 垂直制表符

\\ 反斜杠\

\' 单引号'

\'' 双引号''

\? 问号?

\0oo 八进制值

\xhhh 十六进制值

 

打印:

char a='A';

printf("%d,%c",a);

注意:char类型实际上是按int整型存储的。%d转换说明符会输出65,即ASCII码表中‘A’对应的数值,%c转换说明符会输出字符‘A’。

 

8._Bool

_Bool型实质上也是整型。C中用0表示false,用非0表示true。

 

9.float,double,long double

浮点型计数方式:小数,指数(e计数法,10的指数)

float一般占位是一个字,浮点数常量默认是double型。

声明:

float a;

doubel b;

long double c;

常量:

0.6;.6;6.0;6.;8E-5;.8e4

可以没有小数点或着没有指数,不能同时没有。指数部分必须是整数。后缀F,L,LL。

打印:

%f,%e

浮点数的上溢下溢:

大到无法表示,上溢;小到损失精度,下溢;

C将损失了类型精度的浮点值称为“低于正常的”。

 

10.C从基本数据类型衍生出了其他类型:数组,指针,结构体,枚举,联合。

11.运算符sizeof(int)

C的内置运算符sizeof以字节为单位给出类型的大小。char类型肯定是1字节,因为C把char类型的占位长度定义为一字节。(这里的1字节不一定是8位)

12.自动转换

整数常量默认int,浮点数常量默认double

表达式中,编译器会统一类型,再进行运算,再将结果转换为左值类型。

自动转换一般以短就长;长赋值短会出问题,如浮点数赋值给整型变量,会直接截尾,简单的丢弃小数部分,不会进行四舍五入。double赋值给float会丢失精度,float只能保证前6位是精确的。

系统化的命名规则,让变量名能表示它的类型。

13.刷新输出

printf()函数将输出传递给一个被称为缓冲区buffer的中介存储区域,缓冲区里的内容再不断的被传递给屏幕。

标准C规定在一下3中情况下,将缓冲区内容传递给屏幕:缓冲区满的时候,遇到换行符\n的时候,需要输入的时候,fflush()函数。

将缓冲区的内容传递给屏幕或文件叫做刷新缓冲区。

 

posted @ 2017-03-16 02:40  whgt1989  阅读(320)  评论(0编辑  收藏  举报