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