帮我解释下这个程序是怎么实现的?(问题解决了另外追加分!)

来源:百度知道 编辑:UC知道 时间:2024/06/22 16:40:40
题目要求是明白了,但是不知道为什么他那样做就能实现把10进制转换成2进制或者是16进制.10-2和10-16的转换不是应该除2或者16然后取余数吗?他的这个实现方法我实在是看不懂.还望高人指点.

编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数
char* test3(long num)
{
char* buffer = (char*)malloc(11);
buffer[0] = '0';
buffer[1] = 'x';
buffer[10] = '\0';
char* temp = buffer + 2;
for (int i=0; i < 8; i++)
{
temp[i] = (char)(num<<4*i>>28);
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;
}
return buffer;
}

关键是在这句,
num<<4*i>>28
这里他是用移位操作符"<<"和">>"实现的你说的/2,/16操作
如果你不理解,可以写个小程序看看
int i=16;
i=i<<1;
printf("%d",i);
结果是32
也就是说,
<<相当于乘2,
>>相当于除2

明白了吧