星网锐捷笔试

http://blog.csdn.net/beyondyangkai/article/details/5951578

1 把-4传给函数参数类型为unsigned int 

2 传输层协议 

3 串行总线,半双工通讯 

4 *++优先级 

5 进程间通信方式 

6 语句优化:y=x%16; y=h*63; 

7 函数指针 

8 显存的计算 

9 宏定义:把一个整数的第k位清零 

10 数据在内存中的存储方式,例如-2,  3.14是如何存储的? 

11m和n的平均值(或者接近)的计算是 y=(m+n)/2; y=m/2+n/2;哪一种对? 

12 操作系统,数据结构的知识,网络知识 

13 计算一个字符串中汉字的个数。每个汉字占2个字节,1开头,英文字母1个字节,0开头

 

 

 http://blog.csdn.net/Joogle/article/details/8104092

2013星网锐捷笔试题

啤酒一块钱一瓶,两个空瓶可以换一瓶啤酒,一个人有n元钱,问这个人可以喝到多少瓶啤酒?要求用递归实现。

1.非递归

[cpp]
 
int total(int n)  
  1. {  
  2.     int battl = 0;  
  3.     int empty = 0;  
  4.   
  5.     while (n > 0)  
  6.     {  
  7.         --n;  
  8.         ++battl;  
  9.         if (++empty == 3)  
  10.         {  
  11.             empty = 0;  
  12.             ++n;  
  13.         }  
  14.     }  
  15.   
  16.     return battl;  
  17. }  
 

2.递归

  1. int fun(int n)  
  2. {  
  3.     if (n/2 > 0)  
  4.         return (n-n%2) + fun(n/2 + n%2);  
  5.   
  6.     return n;  
  7. }  

优化%和*操作的效率(星网锐捷笔试题) http://blog.csdn.net/ruanxuewu0120/article/details/5962807

优化下面2个语句的效率:

(1)y=x%16

(2)y=m*63

解题思路:将操作符转化为二进制的移位操作可以大大提高效率

(1)x%16就是保留x(二进制)最后四位,所以只要将x转化为二进制后再和(前面高位补0)1111相与&,即可得x%16结果。

(2)乘法可以用二进制数的移位操作来实现,向右移是除法,向左移是乘法,空位补0。m*63可以转化为m*64-m=m*2的6次方-m

因此m*2的6次方可以转化为将二进制的m向左移6次

  

 

2010星网锐捷软件方面笔试题 http://blog.csdn.net/jimbeing/article/details/5934388

选择题:
1.逻辑题
2.英语题
3.二叉树:深度一样的满二叉树和完全二叉树的结点
4.
int test(int num)
{
 return (num>>4%256); 
}
test(16)?test(256)?
5.
int main()
{
 int i;
 char *a = "123456789"
 char *b = "987654321"
 for(i=0;i<7;i++)
 if(*(a+i) == *(b+i))
 printf("%c",*(a+i));
}
6.
int i,j=2,*p = &i;
*p = *&j来实现i = j 的赋值?
7.
http用来web?
nntp?
ftp用来传输文件?
dns用来域名解析?
8..编译的时候?高级语言汇编语言和什么目标文件关系?
9.#define LEN 100是在哪里(预处理?编译?还是运行?)把LEN全部用100代替
10.
int test(int a,unsigned int b)
{
 if((a+b)>0){
  return 0;
 }
 return -1;
}
void main()
{
 printf("%d/n",test(3,-4)+test(-5,6)+7&8);
}

填空题:
1.一个带一位小数的float型四舍五入来表示一个整形num?
2..在链表i结点前插入个结点,后面要移动几个元素?
3.数组a[m][n],a[0][0] = 644,a[2][2]=676,求a[3][3]?
4.怎么定义一个常指针?
5.
 int a[5] = {7,8,9,10,11};
 int *p = a;
 *(p++) += 123;
 printf("%d,%d/n",*p,*(++p));
6..十个进程,进程片200ms,切换进程片10ms,系统开销大概占多少?
7.osi几层模型啊第四层第五层各为什么?
8.从底层看,用户使用什么来请求操作系统的服务
9.某个lcd分辨率1280*1024,每点24bit,刷屏为60hz,问要至少有多少兆的缓冲空间?
10.int **a[3][4]内存?
11. float a = 1.1;
 double b = 1.1;
 if(a == b){
  printf("a == b");
 }
 else{
  printf("a != b");
 }
12.隐形表达时时缺省项是哪个?
13.
 unsigned char *p1;
 unsigned long *p2;
 p1 = (unsigned char*)0x801000;
 p2 = (unsigned long*)0x810000;
 printf("%d,%d/n",(p1+5),(p2+5));
14..单链表的逆序?
15.. 
· char a[8] = "hello";
 char b[] = "worldyou";
 printf("%d/n",sizeof(a)+sizeof(b));
 int *c;
 char *d;
 void *e;
 printf("%d/n",sizeof(c)+sizeof(d)+sizeof(e));
 

16,进程间通信的方式?
简答题:
1.int strcpy(char*source,char*det)不用库函数
2.串行为什么有时比并行传数据要快?
3.
 int i;
 int a[5];
 int *p = a;
 for(i=0;i<5;i++){
  p++;
  *p = i;
 }
4.求两个值的平均值?
int q,m,n;
q = (m+n)/2正确否?
q = m/2+n/2正确否?
5.一些ip是否能用在主机上,为什么?

 

【锐捷笔试题】将整形变量a的最高n位清零,其它位不变,宏定义:#define clear_bits(a,n)   http://blog.csdn.net/zhizunwudi/article/details/11706875

锐捷昨天的一道互联网C++笔试题,我的写法如下:

#define clear_bits(a,n)  (a)&~(((1<<n)-1)<<(32-n)) 

注:1、n应该加上括号,上面括号比较多,再写上比较混乱,所以没给n写上括号,大家写的时候记得加上;另外,宏定义所有变量最好都加上括号。

        2、(1<<n)-1就是2的n次方减1(当时我直接写的2^n-1,把异或^当成了次方运算,Faint!难过),即最低n位都置为1,例如(1<<4)-1即2的4次方-1,二进制表示为0000 1111

        3、((1<<n)-1)<<(32-n)即把最低的n个1左移到最高的n个1,即最高n为都置为了1,eg,n=4时(以8位二进制为例),((1<<4)-1)<<(8-4),结果为1111 0000

        4、然后对上面结果取反~,即最高的n位置为0,其他位全为1;最后a与这个数,即把a的最高n为清零了。

posted @ 2013-09-17 19:44  星语160523  阅读(645)  评论(0编辑  收藏  举报