C语言基础笔记整理
1、关于进制的转换
小数部分二进制变成十进制的公式:
......an*2^n+a(n-1)*2^(n-1)+......a3*2^3+a2*2^2+a1*2+a0+a(-1)*2^(-1)+a(-2)*2^(-2)+..........
实质就是小数部分就是2的负几次方
例如: 111.1变成十进制是
=2^2+2+1+2(-1)
=4+2+1+0.5
=7.5
反之,十进制转换成二进制,则将小数部分乘以2,取其整数部分,直到乘以2之后是一个纯整数,如2.0,但也有乘不完的,就要看取多少精度了。
比如:10.23 转化成二进制是2^3+2^1+小数部分,小数部分0.23*2=0.46 --> 0.46*2=0.92 --> 0.92*2=1.84 --> 0.84*2=1.68 --> 0.68*2=1.36,取其整数部分,就是00111,精度四位就是1010.00111;
其他进制的转换都可转换成二进制再进行转换,八进制是以右边数过来三位三位来算的,(反过来同理,在进行二进制转八进制的时候,首位不够三位补零),比如八进制的23 二进制就是010(2) 011(3);
十六进制就是以四位为单位,比如同样十六进制的23,变成二进制就是0010 0011,即100011返回去从右边数四位过来,不够四位补零即可;
其他进制的小数转换实在用的少,不做笔记了。
2、if(a==0)和if(0==a),为什么推荐后一种写法
解答:因为如果前面那种写法漏掉了一个等号,那么就会变成赋值,而后一种漏掉一个等号编译就会不通过,能及时预防出错,这是一种良好的编程习惯。
3、for 语句的死循环和while的区别
解答:
一般for(;;)性能更优
for(;;)
{}
这两个;; 空语句,编译器一般会优掉的,直接进入死循环
while(1)
{}
每循环一次都要判断常量1,在这里while比for多做了这点事
浙公网安备 33010602011771号