面试题目,看你能够做对几个!解决办法

面试题目,看你能够做对几个!
1.定义一个结构:
    第一个数据项的取值范围为0~127;
    第二个数据项占用1   bit   的长度;其取值范围为0/1;
    第三个数据项占用1   bit   的长度;其取值为1;
    第四个数据项占用1   bit   的长度;其取值为0;
    第五个数据项占用1   bit   的长度;暂时保留使用;

2.找出下面程序的错误:
      const   int     MAX   =   500;
unsigned   char   Array[MAX];

for   (int   i=0;   i <MAX;   i++)

{
Array[i]   =   i;
printf( "%d   ",   Array[i]);
}

3.使str的内容颠倒输出;
    char   str[]= "I   love   China! ";
    char   *p1   =   Array;
    int   length   =   sizeof(str);  
    char   *p2   =_____(1)____;
    while   (p1 <p2)
    {
      _____(2)____
      _____(3)____
      _____(4)____
      _____(5)____
     
}
    printf( "Str=%s ",str);

4.输出结果:
    void   main()
    {
      int   array[]={1,2,3,4,5};
      int   *ptr   =   array;
      ptr++;
      printf( "%d,%d ",*(ptr-1),*(array+1));  
}

5.定义一个整形指针a,使数据0x1FFF存放的内存地址为0x55000;

6.编写一个函数,不利用第三个数据交换两个数据的值;

7.使整形变量的第4位为1,其余位不变;清除第四位,其余位不变;


------解决方案--------------------
2 Array[i] = i; 溢出了
printf( "%d ", Array[i]);
%d输出的是四字节整数, Array[i] 只有一个字节, 访问越界同时输出结果不正确
------解决方案--------------------
第一个有意思,不知道是不是这样的要求:
struct TestStruct
{
public:
TestStruct()
{
c=1;
d=0;
}
public:
unsigned int a:7;
int b:1;
protected:
int c:1;
int d:1;
public:
int e:1;
};

------解决方案--------------------
6.
void swap(int &a,int & b)
{
a=a < < sizeof(int) + b;
b=(a & (1 < <sizeof(int)))> > sizeof(int);
a=a & ((1 < <sizeof(int)) - 1);
}
------解决方案--------------------
4.
Little_endian:2^9 2^25
Big_endian:2^24 2^8
------解决方案--------------------
class theRe{
BYTE firstNum;
bool seNum;
static const bool thrNum=1 ;
static const bool foNum =0;
byte fi;
} ;