面试宝典 系列(一)
1 形如 !x++ 的计算顺序,若在条件判断中,则需要首先判断(!x)的true或者false,然后需要执行x++。
2 printf 函数的执行顺序是由右至左。代码如下:
int main()
{
int b = 3 ;
int arr[] = {6,7,8,9,10} ;
int * ptr = arr ;
*(ptr++) += 123 ; //实质上与 *ptr++ += 123 效果一样
printf("%d,%d\n" , *ptr ,*(++ptr)); //printf的执行顺序是 由右至左
system("pause");
return 0 ;
}
printf()函数的参数,在printf()函数读取时是从左往右读取的,然后将读取到的参数放到栈里面去。
最后读取到的就放在栈顶,处理参数的时候是从栈顶开始的,所以是从右边开始处理的.--printf()函数的特点。
注意点:
1.printf()函数中的计算是从右向左进行的。
2.我们在写代码时,尽量避免无确定意义的表达式出现,因为不同的编译器,可能会采用不同的理解方式。
3 *ptr++ ,*++ptr 之间的区别。*ptr++ 表示先取值,后++ ,效果同*(ptr++)。 *++ptr 表示ptr的值先自增,然后再取值。
3 float f = 1.0 (int )f 与 (int &) 之间的区别:
int & 表示,把float在内存中的变量的前sizeof(int)个字节,当做int类型的数字输出。
4 判断一个数是否是2的N次方(2,4,8,16),不需要使用循环操作。
注意这些数都是0010 ,0100 ,1000,10000,A&(A-1) 结果必然为0,可以使用这种方法判断。
5 求a , b的最大值
max = ((a + b) + abs(a -b)) / 2
6 交换 a b 的值
a = a ^ b
b = a ^ b
a = a ^ b