- int n[2][2]={{0}{1,2}}; n[0][1]结果是(0)我笔试写的1,竟然算我做对了,但在CodeBlock 里测试发现用了{},没赋值的项全是0.
- 用一个表达式交换两个整数的值:a = (a -(b = (a = a + b) - b)); 或 a ^= (b ^=(a ^= b));
- C语言变参函数的实现原理:在C语言调用约定中,我们知道,__cdecl 与__stdcall 的参数都是由右向左压入堆栈,由于最后一个入栈的参数我们是知道的,由此我们可以得到此时的栈底,如果又知道依次入栈的参数类型,那么就可以依次取出这些可变长的参数。详细参考:http://blog.youkuaiyun.com/fulgen/article/details/6300610
- 实现内存对齐的宏定义:#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) ;
- 比较字符串&&忽略大小写:int strnicmp(const char *, const char *, __kernel_size_t)
{
unsigned char c1, c2;
c1 = c2 = 0;
if (len) {
do {
c1 = *s1;
c2 = *s2;
s1++;
s2++;
if (!c1)
break;
if (!c2)
break;
if (c1 == c2)
continue;
c1 = tolower(c1);
c2 = tolower(c2);
if (c1 != c2)
break;
} while (--len);
}
return (int)c1 - (int)c2;
}
-
获得后缀0bit的个数。(从低位开始的连续的0bit,间接地求最低位的1bit的位置)
int getbitn(unsigned x) {
if(x==0) return 32;
if(x&0x0ffff==0){n+=16;x>>16;}
if(x&0x0ff==0){n+=8;x>>8;}
if(x&0x0f==0){n+=4;x>>4;}
if(x&0x03==0){n+=2;x>>2;}
return n-(x&1);}
一些有关C++语言中的bit操作
-
typedef 和 define的区别:见http://blog.youkuaiyun.com/21aspnet/article/details/6723915
程序语言学习资料:http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frtref%2Fgmtime.htm