C编程第2篇---基本数据类型、运算符和表达式

来源:互联网 发布:菊花插件dbm数据 编辑:程序博客网 时间:2024/06/18 16:58
C编程第2篇---基本数据类型、运算符和表达式
2.1 变量名称
变量和常量是组成C程序的主要对象,所以它们的命名很大程度上影响了程序的可读性、可维护性。
C语言一共32个关键字,亦称保留字,即自定义的命名不能和这32个一样;
auto :声明自动变量   
short :声明短整型变量或函数   
int: 声明整型变量或函数
long :声明长整型变量或函数   
float:声明浮点型变量或函数   
double :声明双精度变量或函数   
char :声明字符型变量或函数   
struct:声明结构体变量或函数   
union:声明共用数据类型   
enum :声明枚举类型   
typedef:用以给数据类型取别名   
const :声明只读变量   
unsigned:声明无符号类型变量或函数   
signed:声明有符号类型变量或函数   
extern:声明变量是在其他文件正声明   
register:声明寄存器变量   
static :声明静态变量   
volatile:说明变量在程序执行中可被隐含地改变   
void :声明函数无返回值或无参数,声明无类型指针   
if:条件语句   
else :条件语句否定分支(与 if 连用)   
switch :用于开关语句 case:开关语句分支   
for:一种循环语句   
do :循环语句的循环体   
while :循环语句的循环条件   
goto:无条件跳转语句   
continue:结束当前循环,开始下一轮循环   
break:跳出当前循环   
default:开关语句中的“其他”分支   
sizeof:计算数据类型长度   
return :子程序返回语句(可以带参数,也可不带参数)循环条件。
变量和常量的命名建议符合其属性和目的;如studentName,englishGrade。

2.2 基本数据类型
从大的方面说,基本数据类型分整型和浮点型;
从小的方面说,分char,int,float和double四种;
注意以下几点:
1)char和int都有signed和unsigned之分,即有符号和无符号;默认情况下是省略signed,即有符号;unsigned的,数值可带后缀为u/U,如1234U;
2)int有short,int和long;
基本数据类型的取值范围,int在不同的机器和不同编译器支持都有所差异;
char:一个字节(8位);
short:一般是16位;
int:反应的机器实际的整型,16位或32位;
long:不低于32位;
float:4个字节(32位),有效位数为6;
double:8个字节(64位),有效位数是15;
所以int的三种位数:short<=int<=long;
整型范围计算:有符号的(2^(n-1)~2^(n-1)-1),无符号的(0-2^n-1),其中,n是位数;
基本数据的范围,在<limits.h>和<float.h>中定义。

2.3 常量
1)数值(字面)常量
①int常量,如1234,long的一般后缀如:123456781234l/L,unsigned long的后缀如:123456781234ul/UL;
②float常量,因为浮点型通常默认是double,所以float数值通常后缀f/F来表示float常量值;另外,还有科学计数法,如1.234e/E+/-3;
③整型的其他表示方式,如八进制和十六进制;八进制,0开头,如023表示19;十六进制,0x/0X开头,如0X23表示35;
提示:整型数都可以以二进制方式表达,八进制以三位为一组,十六进制以4位为一组;八进制(0,1,2...7);十六进制(0,1...9,A,...F)。
2)字符常量
①如'A','B'之类的为单个字符;
②如'\t'、'\n'为转义字符;
\a  响铃(BEL)
\b  退格(BS) ,将当前位置移到前一列
\f  换页(FF),将当前位置移到下页开头
\n  换行(LF) ,将当前位置移到下一行开头
\r  回车(CR) ,将当前位置移到本行开头
\t  水平制表(HT) (跳到下一个TAB位置)    
\v  垂直制表(VT)
\\  代表一个反斜线字符''\'    
\'  代表一个单引号(撇号)字符
\"  代表一个双引号字符
\0  空字符(NULL)
\ddd  1到3位八进制数所代表的任意字符
\xhh  1到2位十六进制所代表的任意字符。
通常使用如下定义来表示:
#define VTAB '\013'   /* ASCII vertical tab */
#define BELL '\007'   /* ASCII bell character */
3)常量表达式
通常在代码文件开头,用#define xxx yyy来表示在程序中出现的xxx代替了yyy的表达式,如:
#define PI 3.1415926535
#define EXPESION 1e-5
#define MAX(A,B) ((A)>(B))? (A): (B)
4)字符串常量
如"Hello, world"就是个字符串常量;就是单个"A"也是字符串;字符串常量存于只读的内存区内(通常出现一个指针指向该字符串常量,企图修改其内容的错误)。
注意:字符串常量赋值给字符数组,若数组空间足够,则字符数组以'\0'结尾。
5)枚举常量
一个枚举是由一系列的整型常量值组成,如:
enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
                JUL, AUG, SEP, OCT, NOV, DEC };
每个枚举对象的值都是唯一的,自上而下递增,自下而上递减。

2.4 声明
一个变量在使用之前,必须已经声明:如char name[20];
一种格式(多个相同类型变量一行):int lower, upper, step;
另一种格式(每个变量一行)<推荐>:
int lower;
int upper;
int step;
有时候,声明可以顺便初始化,即赋初值;如:flaot eps = 1e-5;
关键字'const'表示自读变量,但变量的值不是常量;常用于函数的参数修饰,表示参数不可修改性。

2.5 类型转换
不同数据类型之间的运算,必须涉及不同数据类型的转换;
如:double value1 = 9.65; int value2 = 35; double addResult = value1 + value2;
记住转换原则:从char到double,往数值范围宽的方向转换;
char和short转换为int,遇到long,全部转为long;
若其中一个数是float、double,那么全部转换为float和double。

2.6 运算符
①算术运算符:+、-、*、/、%(求余)
A)%不适用于float和double;%的结果符号根据机器而已;
B)+和-优先级相同;后三者优先级高于前两者,而低于单元运算法(+、-)
②关系运算符:>、>=、<、<=、==、!=
A)前四者优先级相同,而仅仅高于后两者;
③逻辑运算符:&&、||
A)前者优先级仅仅高于后者
B)A&&B,若A为真,则顺序计算B的值,如果B的值为真,则整个结果为真,否则为假;若A为假,B不再计算,整个结果为假;
C)A||B,若A为真,则B不再计算,整个结果为真;若A为假,则继续计算B,若B的值为假,则整个结果为假,否则为真。
④自增自减运算符:++、--
A)前缀时,如++/--A,则先执行A=A+1,然后去A的值;
B)后缀时,如A++/--,则先取A的值,再执行A=A+1
⑤位运算符:&、|、^、<<、>>、~
位运算,即每个运算符转换为二进制补码运算。
A)A&B,对应位当相同时,则结果为相同的值,否则为0;
B)A|B,对应位当一个位为1,对应位的|结果值为1,否则为0;
C)A^B,对应位的值相反时,比较值才为1,否则为0;
D)A>>n,A往右移n个位值,左补0;A<<n,A往左移n个位值,右补0;
E)~A,A的各个位的值取反,即1变0,0变1;
⑥条件表达式:AAA? B:C
若AAA表达式为真,则返回表达式B的值;否则返回表达式C的值;
⑦赋值运算符:=、+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=
以上描述为:i += 1等同于i++和i = i + 1

2.7 运算优先级和取值顺序
1)()、[]、->、.  【left to right】
2)!、~、++、--、+(单)、-(单)、*(指针)、sizeof  【right to left】
3)*、/、%  【left to right】
4)+、-  【left to right】
5)<<、>>  【left to right】
6)<、<=、>、>=  【left to right】
7)==、!=  【left to right】
8)&  【left to right】
9)^  【left to right】
10)|  【left to right】
11)&&   【left to right】
12)||  【left to right】
13)?:  right to left
14)=、+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=  【right to left】
15),  【left to right】
优先级无需死记,谨记每个运算都以()来包括,以此减少错误。


【免责特此声明:

1)本内容可能是来自互联网的,或经过本人整理的,仅仅代表了互联网和个人的意见和看法!
2)本内容仅仅提供参考,任何参考该内容造成任何的后果,均与原创作者和本博客作者无关!】


原创粉丝点击