简单分类:
数据类型:
普通类型:
char 8bit :
'\t' '\v' '\n' '\ddd' '\xdd'
表示方式 :char c = 'A' = 65 = 0101 =0x41= '\101' = '\x41'
char *s ="nihao";
整形(signed /unsigned)
short
int 4bytes --32bit
long
表示方法:十进制数 3356;八进制数 06434;十六进制数 0xd1c (整形+char)
long long
实型
float
3.444444(默认是六位小数)
3.14 X 10(-2)
基数e-2 :e两边必须有数 且 e后必须整数
double
long double
enum
enum DAY {MON,TUE};
emnum DAY today;
enum boolen {true,false};
复合:
数组
struct
union
指针:
*p
void:
空类型 void *p;
可以强转指向任意数据类型
16bit:
char 1
short 2
int 2
float 4
*P 2
32bit:
char 1
short 2
int 4
float 4
double 8
*p 4
64bit:(查一下)
char 1
short 2
int 4
float 8
double 8
*p 8
//------------------------------------------
char c1= 129; //出错,数据越界(?)
unsigned char c2= -1; //出错,数据越界(?)
//----------------------------------
static :(*****)
修改普通局部变量的生成周期 编译时开辟 程序结束时释放
修改全局变量的作用域 ----被限制在本模块中使用(本文件 .c)
修饰函数修改函数的调用范围 -------被限制在本模块中调用(本文件 .c)
多文件编程:
两种方式:
*.h
extern 应用外部变量
//------------------------------------------
数据转换:
强制类型转化:
不是难点
(int) i
运用最多的地方:强转指针类型
隐形类型转换:
是难点,容易被忽略
//-------------------------------
double ---------------float
unsigned long
long
unsigned int
int ----------------char ,short
char c =65;
short b = 40;
(c+b)
面试题:
int main(){
4 int i =-10;
5 unsigned int j = 2;
6 if( (i+j) > 0){
7 puts("it is +\n");
printf("%d\n",(i+j)); //为什么是-8??????无符号用%u输出
}else
9 puts("is is -\n");
10 return 0;
11 }
0000 0000 0000 0000 0000 0000 00001010 ----整数表示
1111 1111 1111 1111 1111 1111 11110110 ----负数
//-------------------------------------
运算符:(逻辑表达清楚)
算术运算符
+ - * / % ++ --
// a++;<==> a=a+1;
(int )/(int )-----int ,丢失精度的问题 ex:3/2 =1
-------解决办法(float)int/(int)
% 两边必须是整数
自加:a++ , ++a
自减:a-- , --a
/*(printf------自右向左
先执行有运算符的----且变化为自左向右 ,且a++失效为++a
再运算 没有运算符的
*/(无用)
关系运算符
> ,< ,>=,<=,!=,==
逻辑运算符
&& !! !
短路效应:
&& 的短路效应:第一个语句为假,则第二条语句不会执行
|| 的短路效应:第一个语句为真,则第二条语句不会执行
(表达式1 &&表达式2)|| 表达式3;假如表达式3执行,则表达式1,至少一个为假
位运算符:
& | ~ ^ << >>
^:异或,相异为1,相同为0
&:清数据位
|:置数据位
常用:<< >> 常拿来 辅助 清数据位 置数据位
0x23------其中后四位清零: 0x23&&0xf0
0010 0011
1111 0000
其中第二位清零????
0010 0011
1111 1101
清空任意位???
需求:置1 任意位
a | (0x1<
清零任意位:
a && ~(0x1<
对于位的运算:还有一个位域,不利于代码的移植,不建议
异或:
用来作数据交换
赋值运算符:
= += -= *= %=
a+=b 比 a=a+b,运算效率要高些,运算结果等价
逗号运算符
从左往右的运算,把最后一个表达式的值赋给运算结果
三目运算符
表达式1 ? 表达式2:表达式3:如果表达式1为真,则执行表达式2,反之执行表达式3。效率比if else 要高
sizeof:其实是一个红宏,,,,,sizeof int
sizeof(数据类型)---sizeof(int) -----4
int a;
sizeof(a)------a 的size -----4
int a[10]
sizeof(数组名)----数组在内存中占据的空间大小
int a[m];
for(i=0;i
a[i] =XX;
for(i=0;i
a[i] = xxx
二维数组,三维数组类似
//--------------------------------------
数值交换三种:
void fun(){
int a;
int b;
int tmp;
if(a > b){
#if 0
tmp = a;
a = b;
b = tmp;
#elseif
a = a^b;
b = a^b;
a = a^b;
#else
a = a + b;
b = a - b;
a = a - b;
#endif
}
}
阅读(881) | 评论(0) | 转发(2) |