对手相逢时,无
论对手多么强大,
明知不敌,也要亮出自己的剑!
读者:有一个16位的整数,每4位为一个数,写函数求他们的和。
小林解释:
整数1101010110110111 和 1101+0101+1011+0111 感觉应该不难。
疑问:既然是16位的整数,1101010110110111是2进制的,那么函数参数怎么定义呢?
答案:用十进制做参数,计算时按二进制考虑。
/* n就是16位的数,函数返回它的四个部分之和 */
char SumOfQuaters(unsigned short n)
{
char c = 0;
int i = 4;
do
{
c += n & 15;
n = n >> 4;
} while (--i);
return c;
}
读者:分析下面的代码:
char *a = "hello";
char *b = "hello";
if(a==b)
printf("YES");
else
printf("NO");
小林:
这个简单的面试题目,我选输出 no(对比的应该是指针地址吧),可在VC是YES 在C是NO lz的呢,是一个常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器 优化的话,会有可能a和b同时指向同一个hello的。则地址相同。如果编译器没有优化,那么就是两个不同的地址。
有时候,正是那些意想不到之人,成就了无人能成之事。——图灵