第三章 顺序程序设计
1.数据的表现形式及其运算
计算机高级语言中,数据有两种表现形式:
常量和
变量。
整型常量:
实型常量:
字符常量:
普通字符
转义字符 如:\\表示一个反斜线;\n表示换行,将当前位置移到下一行的开头;\r表示回车,将当前位置移到本行的开头。
字符串常量:
符号常量:
用#define指令,指定用符号名称代表一个常量。如: #define PI 3.1416
符号常量不占内存,只是一个临时符号,预编译结束后这个符号就不存在了。
变量代表一个有名字的,具有特定属性的一个存储单元。必须先定义,后使用。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。
C99允许使用
常变量,如:const int a=3; 常变量具有变量的基本属性,有类型,占存储单元,只是不允许改变其值。
可以说,常变量是有名字的不变量,而常量是没有名字的不变量。
标识符:用来对变量,符号常量名,函数,数组类型等命名的有效字符称为标识符,C语言规定标识符只能由字母,数字和下划线3种字符组成,且第1个字符必须为字母或下划线。
2.数据类型
整型数据:
基本整形int VC中占4个字节(依具体编译系统而定) 存储单元中的存储方式是用整数的
补码形式存放
短整形short int
VC中占2个字节
长整型long int
4个字节
双长整型long long int
8个字节
整型变量的符号属性:
只有整型(包括字符型)数据可以加signed或unsigned修饰符,实型数据不能加。
char a=128; //-128 1000 0000
unsigned char b=128; //128 1000 0000
char x=0xff; //1111 1111 -1
unsigned char y=0xff; //1111 1111 255
字符型数据:
ASCII字符集包括了127个字符,最多用7个二进制位就可以表示。所以,在C中指定用一个字节(8位)存储一个字符(所有系统都不例外)。此时,字节中的第1位置为0。
'\0'的ASCII码值是0。
大写字母'A'的ASCII代码是十进制数65,大写字母'Z'的ASCII代码是十进制数90。
小写字母'a'的ASCII代码是十进制数97,
小写字母'z'的ASCII代码是十进制数122。
注意:字符'1'和整数1是不同的概念,数字字符'1'的ASCII代码是十进制数49,不是1。
有符号字符型:-128~127 无符号字符型:0~255
浮点型数据:
由于小数点的位置可以浮动,所以实数的指数形式称为浮点数。
单精度浮点型float 4个字节
双精度浮点型double 8个字节(C中的实型常量都默认为双精度)
长双精度浮点型long double 16个字节
IEEE浮点数表示
用
符号,
阶码,
尾数来表示。具体规格如下:
符号位
阶码 尾数 长度
float 1 8 23 32
double 1 11 52 64
float 1 8 23 32
double 1 11 52 64
浮点数转化为二进制数,例:12.25 float 32位
12.25化为二进制表示 1100.01 【规定小数点前只能有一个'1'】 这里需要将小数点前移
3位
8位阶码无符号
0 1 2 3 4 5 6 ......
127...... ......255
左移,位数+127 阶码大于127表示左移
右移,127-位数 阶码小于127表示右移
1
100.01
0
0111 1111 00000000000000000000000 //127做基准,
0111 1111
+ 0 0000 0011 10001000000000000000000
= 0 1000 0010 10001000000000000000000
0100 0001 0100 0100 0000 0000 0000 0000
0x41 44 00 00 而在内存中00 00 44 41
0x41 44 00 00 而在内存中00 00 44 41
内存中,高地址存放高位,低地址存放低位。(小端存放)
运算符和表达式:
· i+++j首先是i++,然后再+j,且注意i++是事后运算。
· &表示按位与,&&表示与运算(返回布尔值)。
同理|表示按位或,||表示进行或运算。
·
不同类型数据的混合运算
为防止精度损失,如果必要的话,类型总是被提升为较宽的类型。
float+double => double
所有含有小于整型的有序类型(如char,short int)的算术表达式在计算之前其类型都会被转换为整型。
char+int => int
char+unsigned char => int
short+unsigned short => int
int + unsigned int => unsigned int
如果没有出现unsigned int,则类型转化为int。如果出现unsigned int,则转化为unsigned int。
void main()
{
in a = 10;
float ft = 12.25;
printf("%d %d\n",a,ft); //%d只是格式控制,不具有格式转换功能。
}
3.C语句
复合赋值运算符:
x%=y+3 x%=(y+3) x=x%(y+3) 三者是等价的。
赋值表达式:
a=(b=3*4) 将3*4的值先赋给变量b,然后把变量b的值赋给变量a,最后a和b的值都等于12。
(a=b)=3*4 编译不通过!赋值表达式(a=b)不能作为左值。