C/C++的奇技淫巧

交换a,b

a = a^b;
b = a^b;
a = a^b;
//不担心越界

计算二进制1的个数

int num = 999;
int counter=0;
while(num)
{
  counter++;
  m&=(m-1);
}

计算结构体内元素的偏移量宏

#define FIND(struc,e) (size_t)&(((struc *)0)->e)

C++ 全局变量与局部变量

int vac = 3;
int main(void)
{
    int vac = 10;

    ::vac++;
    cout<<::vac<cout<return 0;
}

输出

4
10

::vac 为全局变量

(int &)

int main(void)
{
    float a = 1.0f;
    cout<<"(int)a :\t"<<(int)a<cout<<"&a :\t"<<&a<printf("*(int *)&a :\t%d\n",*(int*)&a);
    cout<<"(int&)a : \t"<<(int&)a<return 0;
}

输出

(int)a : 1
&a : 0x7ffeb2482bf4
(int )&a : 1065353216
(int&)a : 1065353216

(int &)a相当于将该浮点数地址开始的sizeof(int)个字节当成int型输出。

你可能感兴趣的:(c/c++)