数值转换的一个问题!!!

来源:百度知道 编辑:UC知道 时间:2024/06/05 07:07:33
对于C语言来说,一个整数在计算机内就是以二进制的形式存储的,所以没有必要再将一个整数经过一系列的运算转换为二进制形式,只要将整数在内存中的二进制表示输出即可。

#include<stdio.h>
void printb(int,int);
int main()
{
int x;printf("Input number:");
scanf("%d",&x);
printf("number of decimal form:%d\n",x);
printf(" it's binary form:");

printb(x,sizeof(int)*8); /*x:整数 sizeof(int):int型在内存中所占的字节数
sizeof(int)*8:int型对应的位数*/

putchar('\n');

printf("%d\n", sizeof(int));

return 0;
}

void printb(int x, int n)
{
if(n>0)
{
putchar( '0' + ( (unsigned)(x & (1 << (n-1))) >> (n-1)) ); /*输出第n位*/
printb(x,n-1); /*归调用,输出x的后n-1位*/
}
}

里边有关移位的操作有谁可以说说吗 有点昏 谢谢

大概楼主是 x & (1 << (n-1))) >> (n-1)) 这里看不懂

其实这个没有你想象中复杂, 真的很简单,
就是:
step1. 1 << (n-1) 构造出一个第n位是1, 其余位是0的数 (当然是二进制)
step2. x&这个数, 这样就把x的第n位保留, 其余位都被置0 (因为1&y=y, 0&y=0)
step3. 再右移n-1位, 即把第n位移到了第一位, 就得出了第n位是多少