麻烦给讲讲下面的程序,我的分不多了,谢谢各位

hongxia1981 2009-09-01 10:49:06
//编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数
#include <stdio.h>
#include <malloc.h>
#include <string>

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;
}

int main()
{
long num = 27455;
char *s = test3(num);
for (int i = 0; i < strlen(s); i++)
{
putchar(s[i]);
}
putchar('\n');

}
...全文
60 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
selooloo 2009-09-01
  • 打赏
  • 举报
回复
应该是这样吧
char* buffer = (char*)malloc(11*malloc(char));
kakashi0309 2009-09-01
  • 打赏
  • 举报
回复
这程序有问题吧 首先 char类型应该是unsigned char

for循环里面不知道啥意思....

bfhtian 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 hongxia1981 的回复:]
//编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数
#include <stdio.h>
#include <malloc.h>
#include <string>

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); //1
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;//2
}
return buffer;
}

int main()
{
long num = 27455;
char *s = test3(num);
for (int i = 0; i < strlen(s); i++)
{
putchar(s[i]);
}
putchar('\n');

}

[/Quote]
1、一个数(int,long)如果用16进制表示,其存储形式为0xXXXXXXXX,若要它的各位从高到低并存储到char型数组中(buffer),需要移位操作。要得到最高位,需向右移28位,移位后的结果为0x0000000X,同理若要得到第二位需向右移24位(28-4*i,题目是先向左移位再向右移位,效果是一样的),移位后结果为0x000000XX,想得到最后一位还需转为char型。
2、若得到的结果是个位数,如3,需将其转为字符‘3’,因为48的ascii码为0x30,即48,所以为个数时要加上48;若得到的结果为10到15,需转化为‘A’(0x41,即65)到‘F’,需加上65-10=55

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧