您的位置:首页 > 其它

不使用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐