位操作、函数和数组
1 位操作
1.1 位域
#include <stdio.h>
typedef struct{
int a:2;
int b:3;
int c:1;
}test;
int main()
{
test t = {1, 3, 1};
printf("%d %d %d %d", t.a, t.b, t.c, sizeof(test));
//输出结果为:1 -1 -1 4
}
1.2 利用位运算的快速算法
a << 1; //a*2
a >> 1; //a/2
a & 7; //a%8
(a << 3) - a; //a*7
2 函数
3 数组
3.1 易错题
int main()
{
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++)+=123;
printf("%d,%d\n", *ptr, *(++ptr));
}
//结果为8,8
程序分析:*(ptr++) += 123
可展开为*(ptr++) = *(ptr) + 123
,故此语句执行后arr[0]=129,ptr指向arr[1],即ptr=7;注意printf、cout计算参数时是从右往左压栈的,故先计算 *(++ptr)
的值,所以ptr指向arr[2],即ptr=8。