不使用printf系列库函数,将十进制数以十六进制数形式输出
2012-10-07 10:02
232 查看
char *get16string(long num){ /*得到16进制形式的字符串*/
int i = 0;
char *buffer = (char*)malloc(11);
char *temp;
buffer[0] = '0', buffer[1] = 'x', buffer[10] = '\0';
temp = buffer + 2;
for(i=0;i<8;i++){
temp[i] = (char)(num << 4 * i >> 28); /*乘法优先级高于移位符, 移位符左结合*/
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; /*之所以会出现负数是因为:左移之后,若最高位为1,则编译器认为该数为负数,执行右移操作(该编译器执行算术移位)时,移入位均用1补齐*/
temp[i] = temp[i] < 10 ? temp[i] + '0' : temp[i] - 10 + 'A' ;
}/*从高位开始,每一次循环都取出num的二进制码中的四位,并转换成一个16进制的数值。*/
return buffer;
}
int main(){
int a = 7;
printf("%d, test int size\n",sizeof(a));
printf("%d, test translate\n",(char)(15<<28>>28));/*此时左移之后最高位为1*/
printf("%d, test translate\n",(char)(15<<27>>27));/*此时左移之后最高位为0*/
printf("%d, test \n",(char)(9<<28>>28));/* 1001 4位:-16*/
printf("%d, test \n",(char)(17<<27>>27));/* 10001 5位:-32*/
printf("%d, test \n",(char)(105<<25>>25));/* 1101001 7位:-128*/
/*若一个n位(n为十进制数)二进制数的最高位为1,当把它的最高位认为是符号位时(把它作为补码),该数变为原值减去(2的n次方)。*/
printf("456789 to Hexadecimal string:%s\n", get16string(456789));
return 0;
}
int i = 0;
char *buffer = (char*)malloc(11);
char *temp;
buffer[0] = '0', buffer[1] = 'x', buffer[10] = '\0';
temp = buffer + 2;
for(i=0;i<8;i++){
temp[i] = (char)(num << 4 * i >> 28); /*乘法优先级高于移位符, 移位符左结合*/
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; /*之所以会出现负数是因为:左移之后,若最高位为1,则编译器认为该数为负数,执行右移操作(该编译器执行算术移位)时,移入位均用1补齐*/
temp[i] = temp[i] < 10 ? temp[i] + '0' : temp[i] - 10 + 'A' ;
}/*从高位开始,每一次循环都取出num的二进制码中的四位,并转换成一个16进制的数值。*/
return buffer;
}
int main(){
int a = 7;
printf("%d, test int size\n",sizeof(a));
printf("%d, test translate\n",(char)(15<<28>>28));/*此时左移之后最高位为1*/
printf("%d, test translate\n",(char)(15<<27>>27));/*此时左移之后最高位为0*/
printf("%d, test \n",(char)(9<<28>>28));/* 1001 4位:-16*/
printf("%d, test \n",(char)(17<<27>>27));/* 10001 5位:-32*/
printf("%d, test \n",(char)(105<<25>>25));/* 1101001 7位:-128*/
/*若一个n位(n为十进制数)二进制数的最高位为1,当把它的最高位认为是符号位时(把它作为补码),该数变为原值减去(2的n次方)。*/
printf("456789 to Hexadecimal string:%s\n", get16string(456789));
return 0;
}
相关文章推荐
- 把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
- 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数
- 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。
- 把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 134 编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf系列
- 把十进制数(long型)分别为二进制和十六进制形式输出,不能使用printf
- 不能使用printf,将十进制数以二进制数和十六进制的形式输出...
- 不是用它printf,将十进制数以二进制和十六进制的形式输出
- 不是用它printf,将十进制数以二进制和十六进制的形式输出
- IAR开发环境使用串口printf输出(基于STM8L15x系列单片机)
- MFC的GUI窗口使用Console输出函数printf(AllocConsole后,使用GetStdHandle取得句柄,然后就可以操作了)
- 系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志
- 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列
- MFC的GUI窗口使用Console输出函数printf
- 从键盘输入不多于四位的十进制数,以十六位二进制数形式输出