学习C的一些笔记(二)

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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值