二进制和进制转换
二进制、八进制、十六进制转换成十进制:按权相加
十进制转换成二进制、八进制、十六进制:连续除以基,从低到高记录余数,直至商为0
二进制转换成十六进制:每4个二进制位转换为1个十六进制位(1,2,4,8)
内存大小的单位
二进制位(bit):一位的值可以是0或1
字节(byte):一个字节由8个二进制位组成。最右端的位称为“最低位”,编号为0;最左端的位称为“最高位”,编号为7
TB-GB-MB-byte
常量
在运行时不分配运行空间,值不能被改变的量
整型常量:如 1000,12345,0,-345
实型常量(带小数点):
小数形式:如 0.34,-56.79,0.0
指数形式:如 12.34e3(代表12.34×10^3)
字符常量(使用单引号):
一般字符:如 ’?’
转义字符:如 ’\n’
字符串常量(使用双引号):如 ”boy”
符号常量:#define PI 3.1416
#include <stdio.h>
#define PI 3.1416
int main()
{
printf("%d\n", 100);
printf("%f\n", 10.11);
printf("%e\n", 1.02e2);
printf("%c\n", '?');
printf("%c\n", '\n');
printf("%s\n", "string");
printf("%f\n", PI);
return 0;
}
变量
在运行时分配内存空间、值可以被改变的量
变量名必须是一个标识符。
标识符只能由字母(A——Z,a----z)、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
类型
类型就是变量要存储的数据的类型,影响变量的内存分配,包括分配的内存空间的大小(占多少字节)以及数据的存储格式
基本类型的大小(32位程序)
基本类型所占位数随可执行文件位数的不同而不同
int:32位,4个字节
long int:32位,4个字节
long long int:64位,8个字节(byte)
char:8位,1个字节
float:32位,4个字节
double(常用):64位,8个字节
?字符型(char)变量存储一个整数,表示这个ASCII码对应的字符,因此是一种整数类型
char 变量在内存中存储的是字符对应的 ASCII 码值。如果以 %c 输出,会根据 ASCII码表转换成对应的字符,如果以 %d 输出,那么还是整数。
int 变量在内存中存储的是整数本身,如果以 %c 输出时,也会根据 ASCII码表转换成对应的字符。
也就是说,ASCII 码表将整数和字符关联。
在char的取值范围内(0-255),字符和整数没有本质区别。
字符肯定是整数,0-255范围内的整数是字符,大于255的整数不是字符。
字符’1’和整数1是不同的概念
字符1在内存中以ASCLL码存储,占8bit
整数1在内存中以整数形式存储,占32bit
变量的内存空间和赋值语句
内存以字节(byte)为单位组成,每个字节有一个地址
变量定义的语义是:在运行时为变量分配与它类型相对应大小的内存空间。(此内存空间有一个起始地址,这个起始地址就是变量名)
访问变量的语义是:根据变量名找到相应的地址,然后读写该地址上的内存空间
通过地址能找到变量对应的内存空间,也就是地址指向该变量,所以地址又叫做指针
赋值表达式:
左表达式=右表达式
先求右表达式的值,然后将这个值存入左表达式所代表的内存空间,在 i=3+5 完成赋值后,变量 i 的值和表达式的值都是8。
赋值操作符是右结合的。 例如,a=b=5和a=(b=5)等价。
赋值语句(;):
变量赋初值相当于定义变量后赋值。
例如:int i=3;
相当于:int i; i=3;
枚举类型
枚举类型定义中的每一个枚举元素都代表一个整型常量,按顺序依次为0, 1, 2, 3, 4, 5, …
例如,Weekday中,sun的值为0,
mon的值为1,…,sat的值为6
枚举元素相当于符号常量,不能对他们赋值
#include <stdio.h>
int main()
{
enum Weekday{mon,tue,wed,thur,fri};
int a;
a=mon;
printf("%d",tue);
return 0;
}
指针变量
一个变量的地址称为该变量的指针,如果一个变量专门存放其他变量的地址,称其为指针变量
指针变量定义的语义:在运行时,为指针变量分配与可执行文件位数相同大小的内存空间,对于32位程序分配32位,对于64位程序分配64位。 注意分配的内存空间大小与基类型没有关系。
两个与指针相关的操作符
&:取地址操作符
*:解引用操作符(间接访问指向的变量)
p指向变量i,则*p就代表i,类型为int。即变量i有了另一个名字:*p
将数值4送到变量i中有两种方法:
1.将4直接送到变量i中,例如:“i=4;”
2.令变量p指向变量i,然后将4送到变量p所指向的内存空间(即变量i的内存空间),例如:“*p=4;”,其中*p表示p指向的内存空间
常变量
在运行时分配内存空间、值在初始化后不能再被改变的量
eg.const int i=3; const int* p=&i; int* const p=&i;
输出规制
%[flags][width][.precision][size]type
flags表示标示字符,例如减号‘-’表示在给定的输出域宽内左对齐
width表示输出域宽,是一个非负十进制数
例如:printf("[%-8d]\n", a);
precision表示精度规格,是一个非负十进制数,可以表示浮点数小数点后的位数,默认为6
例如:printf("[%10.5f]\n", a);
size表示参数大小规格,表示对应参数的大小,例如:h表示short,l(小写L)表示long,ll (小写LL)表示long long
使用scanf时,注意输入格式与格式字符串必须完全匹配。
(1)对于 scanf("a=%f,b=%f,c=%f", &a, &b, &c);
1 3 2↙ 错
a=1 b=3 c=2↙ 错
a=1,b=3,c=2↙ 对
(2)对于scanf(”%c%c%c”, &c1, &c2, &c3);
a b c↙ 错
abc↙ 对
putchar函数输出字符
char c = ‘a’; putchar(c);
getchar函数输入字符
char c; c=getchar();