整形常量
C的整形常量有三种表示方式,即十进制整数,八进制整数和十六进制整数。
十进制数:一串连续的数字表示,最高位非零。
八进制数:以数字零开头。
十六进制数:以数字零和字母x开头,a-f不区分大小写。
零既是十进制又是八进制。
整形变量又分有符号和无符号两种,变量在使用前必须加以说明或定义。
有符号分为三种:int,short.long
无符号分为三类:unsigned int,unsigned short,unsigned long,它们的值不能为负
它们的范围是:
short(16bit)<=int(16bit)<=long(32bit)
正整数:以原码的形式存放在内存中,它的取值范围是(0~32767)
负整数:以补码的形式存放在内存中
求法:符号位不动,对原码取反加1即得补码。
对内存中的负整数转化为十进制数:
对补码各位取反,符号位不动,同时对其它位数转化为十进制,然后将十进制减去1.
例如:【1111111111110101】补码 取反后 【1000000000000101】将其转化为十进制数字得-5
将结果减去1得到-5-1=-6.
字符常量与变量
以单引号括起来的单个字符。
/n 换行符 // 反斜线符
/t 水平制表符 /' 单引号
/b 退格符 /0 空字符(并非空格字符)
/r 回车符(不换行) /ddd 位数1至3位的八进制数字
/f 换页符 /0xff 位数1至2位的十六进制数字
转义序列输出:
printf("A/Nbc/nDEF/n"); /作为空字符输出。
printf("/t C Programme/rwer///n");
printf("/t C Programme/rwer///n /x");
如果是这样的/x,一些编译环境会认为是少一个零。将它作为十六进制处理。
对于字符串常量而言,它是有不可见字符的,例如 7 就是字符串响铃的值。
对于字符而言,它占用八位,同时它对应相应的整形。但是如果超过位数它如何处理呢?
int _tmain( int argc, _TCHAR * argv[])
{
char ch_first,ch_second;
ch_first = ' þ ' ;
ch_second = ' b ' ;
// ch_first=ch_first-32;
// ch_second=ch_second-32;
printf( " ch_first=%c ch_second=%c " ,ch_first,ch_second);
// þ转化为(011111110)那么超过了八位,那么去掉0,按照补码处理就是一个负数
printf( " ch_first=%d ch_second=%d " ,ch_first,ch_second);
getchar();
return 0 ;
}
运行结果:(但是C编译系统将字符当成有符号整形还是无符号整形并没有规定,但是采用了微软的环境则按照有符号处理)
字符量可参与任何整数运算。
数字字符可以整数值之间转化
字符的‘9’<>9
字符量可以参与关系运算
字符量可以参与逻辑运算
字符串常量
字符串常量是用一对双引号括起来的零个或多个字符的序列。
“x”在内存中占用两个字节,而'x'占用一个字节。
"x"相当于"x/0"--->/0是结束标志。
“”双引号只充当字符串的分界符,而不是字符串的一部分。
如果字符串出现双引号,则必须经过转义。
The "apple"---->The /042apple/042
字符串长度即包含的字符数,例如“abc”为三,“”为零,"/0ab"的长度为2。
字符串占用的空间为长度+1。
转义序列出现在字符串中,它按照一个字符处理。
浮点型常量与变量
浮点常量有非指数和指数两种。
非指数型:是指不带指数部分的实型常数字。例如123.23等
指数型:带指数部分的实数123.23e2
e不分大小写,之前必须有数字,之后的指数必须为整数(0为非法),且不能插入空格。
浮点型变量:
通过保留字float来说明。
float x,y,z
单精度
(0.5)10=(0.1)2=(.1*20)=(1*2-1)
(12.1875)10=(1100.0011)2=(.11000011*24)=(.11000011*2-4)
12/2=6 余 0
6/2=3 余 0
3/2=1 余 0
经过反序列是1100,所以整数部分为1100,
0.1875*2=0.375 取整数 0
0.375*2=0.75 取整数 0
0.75 *2=1.5 取整数 1
0.5*2=1.0 取整数 1(小数部分已经为零结束),所以小数部分为0011。
经过观察二进制实数总可以表示成N=S*2p
P和S都是有符号二进制整数。P为阶码,S为尾数。S中没有小数点或约定在最前头。
浮点型数据4个字节,32位数据。
S占24bit P占8bit,
设P的字长为n1,S的字长为n2则有-2 n1-1<=P<=2 n1-1-1,-2 n2-1<=S<=2 n2-1-1则一个实数的字长为n1+n2
双精度
字长比单精度多一倍,占用64位
单精度的有效数字是7位,双精度为17位(基本的编译器约定)
每个浮点型常量都是以双精度型来存放的。
双精度是通过double保留字来说明的。
double a.b