C 基础 (整形,字符型,浮点型)

 整形常量

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 就是字符串响铃的值。

对于字符而言,它占用八位,同时它对应相应的整形。但是如果超过位数它如何处理呢?

#include  " stdafx.h "

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值