位制转换
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; }
作者:wj704
出处:http://www.cnblogs.com/wj204/