您的位置:首页 > 编程语言 > C语言/C++

C语言学习笔记1--符号常量、变量、运算

2014-05-02 19:50 441 查看
一、符号常量:用标识符代表一个常量。在使用前必须定义。

定义格式:

#define 标识符 常量

#define也是一条预处理命令(以#号开头 所谓预处理是指程序在还没有编译之前进行的处理)称为宏定义命令

注意:习惯上符号常量的标识符用大写字母 变量标识符用小写字母

例:

#define PRICE 30

注意:符号常量与变量不同,他的值在其作用域内不能改变,也不能被赋值

使用符号常量的好处是:

1)含义清楚

2)能做到一改全改

二、变量:



上图为C语言变量原理图

1、整形数据

1)整形常量

八进制整常数必须以0开头如:015 0101

十六进制整常数的前缀为0X或0x如:0x2A 0XA0

在16位的机器上基本整形的长度是16位的。因此表示的数是有范围的,十进制无符号整常数的范是0~65536(2的16次方)。有符号是-32768~32758 现在都32位64位了那就是2的32次方和2的64次方

如果超过了上述范围就必须加上后缀如长整形“L”或“l”

课外说明:一个字节BYTE=8bit 宽带 2M 是指 2Mbps 这里的b是bit 所以要除以8

2)整型变量

变量的值在内存中是以二进制存储的

数值是以补码表示的

正数的补码和原码相同

负数的补码:将该数的绝对值的二进制形式按位取反再加1

例如:-10的补码

10的原码: 00001010

取反: 11110101

再加1,得-10的补码: 11110110

第一位是符号位如果为1表示为负数

看一下编译器表示的基本变量占多少字节

#include <stdio.h>

void main()

{

printf("%d\n",sizeof(int));

}

那么关于整形变量

类型说明符 数的范围 字节数

int (这是有符号的) -65536~+65536 4

#include <stdio.h>

void main()

{

short a,b;

unsigned short c = 65536;

printf("short长度:%d\n",sizeof(short));

a = 32767;

b = a + 1;

printf("a=%d,b=%d\n",a,b);

printf("unsigned short长度:%d\n",sizeof(unsigned short));

printf("c=%d\n",c);

}



上面的例子c溢出了利用补码解释一下

对于正数,反码,补码与原码相同。

对于负数,补码是原码的符号位不变,数值部分按位取反再加1。

short型数据2字节共16位 取值范围是 -32768~32767 1000000000000000(-32768的补码)~0111111111111111 short型32767补码是0111111111111111 加1后为1000000000000000(注意最高位是符号位),1000000000000000正是-32768的补码。

unsigned short型数据是16位都用来表示数值,16位0000000000000000-1111111111111111表示的范围是0-65535

unsigned short型数据无符号65535为1111111111111111(16位),加1后为10000000000000000(17位)这时计算机判断溢出后丢弃第17位,变为0000000000000000就是0了

3)浮点型

两种形式:

十进制小数形式:5.478

指数形式:由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成:

0.5E7 等于 0.5*107 -2.8e-7等于-2.8*10-7

标准C允许浮点数使用后缀。后缀为"f"或"F" 如:356f与365.是等价的

3.14159在内存中的存放形式:以指数形式存放

第一位 2~8位 第9位 再后

符号 小数部分 指数符号 指数

+ .314159 + 10的几次方

三、运算

1、除法运算注意

printf("%d\n",3/2);舍去小数为1

printf("%f\n",3/2); 运行错误,整形除整形不能赋值给浮点

printf("%d\n",3.0/2);这个可以都转为double

总之类型要一致

2、自增 自减

例如

#include <stdio.h>

void main()

{

int y,i=5;

int x,b=5;

y=i++;

printf("y=%d\n",y);

printf("i=%d\n",i);

x=++b;

printf("x=%d\n",x);

printf("b=%d\n",b);

}

结果:

y=5

i=6

x=6

b=6

press any key to continue

由上可以看出y=i++; 是先把i赋值给y然后i自增1所以y=5 i=6

x=++b;是b先自增1再赋值给x所以b=6 x=6;

总结:++前置:b自增1后再参与其它运算;++后置:i参与运算后,i的值再自增1

#include <stdio.h>

void main()

{

int i=8;

printf("i=%d\n",i++);

printf("i=%d\n",i);

}

结果:

i=8

i=9

这个更明白一些..这个i++是关键......

3、类型转换

例如:

#include <stdio.h>

void main()

{

int a,m,b=322;

double x,y=8.88;

char c1='k',c2;

a=y;

x=b;

m=c1;

c2=b;

printf("a=%d,x=%f,m=%d,c2=%c\n",a,x,m,c2);

}

结果

a=8,x=322.000000,m=107,c2=B

Press any key to continue

解释:字符型赋值给整型,由于字符型为一个字节,而整形为四个字节,故将字符型的ASCII码值放到整型量的低八位中,高位为0。整型赋予字符型只把低八位赋予字符量

4、复合的赋值运算符

例:

a+=5 等价于a=a+5

x*=y+7 等价于x=x*(y+7)

r%=p 等价于r=r%p

可以提高编译效率

5、逗号运算符

int a=2,b=4; 这些不是逗号运算符

y=(x=a+b),(b+c)

把最后一个b+c的值赋值给y
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: