问题描述
我尝试过
fprintf(stdout,"%06x\n",number);
当MSB为0时,它的确工作得很好,但是我使用2的补数表示负数,但不适用于它们
例如。这是它的打印内容
ffffff9f
负数,8位数字。
0b680c
-正数,可以,为6位数字。
我的数字永远不会太大而无法容纳24位,因此它们应始终适合6个十六进制字符,但是我该如何制作,因此它将修剪左侧部分以始终精确地打印6位数字?
解决方法
将数字转换为unsigned long
,作为副作用,这将确保2的补码表示,即使目标为负数使用了其他表示形式;然后用0xFFFFFF
遮罩。即
fprintf(stdout,"%06lx\n",(unsigned long)number & 0xFFFFFFUL);
保证最大程度地可移植;即在具有16位整数的目标,负数的不同表示形式等目标上进行工作(我相信不必将外部强制转换为无符号长,因为0xFFFFFF
应该是