C 笔试题目

  1. int n[2][2]={{0}{1,2}}; n[0][1]结果是(0)我笔试写的1,竟然算我做对了,但在CodeBlock  里测试发现用了{},没赋值的项全是0.
  2. 用一个表达式交换两个整数的值:a = (a -(b = (a = a + b) - b)); 或   a ^= (b ^=(a ^= b));
  3. C语言变参函数的实现原理:在C语言调用约定中,我们知道,__cdecl__stdcall 的参数都是由右向左压入堆栈,由于最后一个入栈的参数我们是知道的,由此我们可以得到此时的栈底,如果又知道依次入栈的参数类型,那么就可以依次取出这些可变长的参数。详细参考:http://blog.csdn.net/fulgen/article/details/6300610
  4. 实现内存对齐的宏定义:#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) ;
  5. 比较字符串&&忽略大小写: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;

}

  1. 获得后缀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操作

  1. typedef 和 define的区别:见http://blog.csdn.net/21aspnet/article/details/6723915

 

程序语言学习资料:http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frtref%2Fgmtime.htm

你可能感兴趣的:(C 笔试题目)