位制转换

1,求下列程序的输出结果:

#include<stdio.h>
int main()
{
    printf("%f\n",5);
    printf("%d\n",5.01);
}

分析:首先参数5是int型,32位平台中为4字节,因此在stack中分配4字节的内存,用于存放参数5.然而printf根据说明符“%f”,认为参数应该是个double型(在printf函数中,float会自动转换成double),因此从stack中读了8个字节。很显然,内存访问越界。如果printf或者scanf中指定了"%f",那么在后面的参数列表中也应该指定一个浮点数,或者指向浮点数变量的指针,否则不应加载支持浮点数的函数。

结果是:

关于后面的解释:http://blog.csdn.net/yahohi/article/details/7701434

2.写一个八进制转换成十进制的数的程序

#include<stdio.h>
int fun(int i)//求8的幂次方
{
  if(i==0)
      return 1;
  else
      return 8*fun(i-1);
}
int main()
{
    int i_8;
    int i_10=0;
   
    printf("请输入八进制数\n");
    scanf("%d",&i_8);
    for(int j=i_8,count=0;;j=j/10,count++)//count用于记录八进制的位数
    {
        i_10+=j%10*fun(count);
        if(j==0)
            break;
    }
    printf("转换后的十进制数为:%d\n",i_10);
return 0;
     
}

结果:

突破,不要害怕自己动手写程序,你看通过自己想,是可以写出来的,刚开始总觉得,自己好像知道这个思路,但是就是不知道用程序怎么表现,这是一定要突破的,而且要成为习惯,把自己的想法用程序表现出来。。。

3.在C++中,有四种运算符转换,请列举并解释它们之间的不同。

1)static_cast 数制转换

2)dynamic_cast 用于执行向下转换和在继承之间的转换

3)const_cast 去掉const

4) reinterpret_cast 用于执行并不安全的implementation_dependent类型转换。

更详细的解释:http://blog.csdn.net/hrbeuwhw/article/details/7884797

4.用<<、>>、|、&实现一个WORD(ABCD)的高低位交换

#include<stdio.h>

int main()
{
    unsigned short a=0xabcd;
    unsigned short b;
    unsigned short c,d;
    b=(a<<8)&0xff00;
    c=(a>>8)&0x00ff;
    d=b|c;
    printf("\n%x",b);//%x,%X 读入十六进制整数 
    printf("\n%x",c);
    printf("\n%x\n",d);

return 0;
     
}

posted @ 2013-10-03 18:15  wj704  阅读(417)  评论(0编辑  收藏  举报