1.wchar,可以打汉字,#val把数字类型如int,变成字符串,在变量前加上变量类型表示强制转换,如int a ,b;(double)a + b;表示把a+b的结果转换成double类型。
2.printf(“file: %s, line: %d\n”, __FILE__, __LINE__) ,(__FILE__)文件路径,(__LINE__)行号
3.一定要注意优先级,特别是在循环判断中,如在写计算器时,(ret =scanf(“%d%c%d”, &left, &op, &right) != -1)为一个死循环,正确的应该为((ret = scanf(“%d%c%d”, &left, &op, &right) )!= -1)
4.逗号表达式,逗号表达式的值为最后个逗号后面的值。(如,while(cin>>ival, !cin.eof()),以后面cin.eof的值为准)
5.*代表间接引用
6.一般PC为小端机,数据地址要反着读,如:在内存中地址为 7b 00 00 00,则真正地址应为 00 00 00 7b。
7.i++与++i区别
i++ ++i
{ {
int temp; i = i + 1;
i = i + 1; return i;
return temp; }
}
8.补码,右移时,低位丢弃,高位补符号位(正数补0,负数补1),左移,高位直接丢弃,低位补0。左移相当于*2的n次方。右移相当于除2取整。
9.计算机中,都是以补码表示,-123 源码为:
1000 0000 0000 0000 0000 0111 1011,补码则为:
1111 1111 1111 1111 1111 1000 0101(除符号位,取反加1)ffffff85 读的时候倒过来 85 ff ff ff(mac 0407,testbit)(正数源码补码反码都一样)
10.按位取反“~”一般和 与或一起用
11.与(&)操作是用来把某一个位清0的(?& 0 = 0)。检测某一位状态是与1(? & 1 = ?)。如,检测0x12345678第8位是否为1。补码为
0001 0010 0011 0100 0101 0110
0111 1000
0000 0000 0000 0000 0000 0000
1000 0000 //1 << 7
————————————————————
0000 0000 0000 0000 0000 0000
0000 0000
12.或(|)操作,用来把某一位置1。
13.异或(^)操作,用于两个数互换(整数类型),如,a = a^b;b = a ^b;a = a^b;。两个相同的数异或为0,比较位不同时为1。
判断某个元素是否在集合中,就判断相应的位是否为1,如:第i位,arr[i >> 5] &(1<<(i % 32)),判断集合中元素个数,也就是数集合中1的个数,
注意:计算机中2个数比较,或者进行位运算都是在二进制情况下
14.条件编译是预处理时候判断
15.比较浮点数是否相等,不能用等号,一般是用减法,算两个数的差,如:
float dval = 3.14;if(dval - 3.14 <= 0.000001)……
16.double类型精度是小数点后16位,float类型是小数点后6位
17.else跟最近的if配对
18.switch 比较是拿括号内的值与case后表达式的值比较,如果相等执行 冒号后面的语句。
注意:表达式的值的类型不能是浮点数,不能是字符串,如果满足表达式,则继续往下 运行而不是退出,退出需要在表达式后添加break。case后面为 “ :”,不是“ ;”
19.若都不满足表达式,可以添加default语句(mac 0407 text.c)
20.do-while跟while的区别是,do-while要多执行一遍循环。第一遍是无条件的。do-while转换为while为:
do exp2;
{ exp3;
exp2; while(exp1)
exp3; =>> {
}while(exp1) exp2;
exp3;
}
21.跳转有两个一个是goto语句,还有setjmp与logjmp函数(能实现不同层之间跳转)。
22.goto有一个局限性,goto语句跟跳转的必须在一个函数中,如果不在一个函数中则不可以
23.函数申明可以不填写变量名,编译器值关心类型,如:
int getdayofyear(int , int , int );
24.bool类型需要引用头文件,#include<stdbool.h>,返回值为 true与false 在函数中调用的话,true为1,false为0
25.函数调用中的return 是将调用的函数结果,返回给函数调用者。
26.utf-8编码是一个汉字3个字节,gbk一个汉字2个字节
27.字符串要留一个空间给“\0”
28.求字符串长度用sizeof,strlen,头文件是#include<string.h>
29.strlen实现是通过从字符串开头开始遍历,直至找到“\0”为止,输出计数器中数字(mac 0409 test)
30.给某块内存赋某个值用memset