将2s补码转换为十六进制

时间:2015-08-08 14:25:33

标签: c

我有一个16位数字,这个数字是2s补码示例0xFF25.Let假设a = 0xFF25 我希望从它获取原始数字'a'并保存另一个十六进制值b(b是16位变量) 请告诉我一个找到b。(C代码)

的方法

示例:

 signed short int Data_proc(unsigned char data_high, unsigned char data_low)
   {
    signed short int ddata;
    ddata = ((data_high<<8)|data_low);
    return ddata;
   }


   I=Data_proc(a,b);//Now I contain a 2s complement value

我想要从中获取真正的十六进制值。

2 个答案:

答案 0 :(得分:1)

如果我理解你的话(我真的不知道我是否知道)你想要这样的东西

short a = 0xff25;
printf("hexadecimal %04x equals decimal %hd\n", a, a);

就像我和其他人在评论中所说的那样,数字不是以十六进制,十进制或八进制存储,只是以二进制位,1和0存储。十六进制,十进制和八进制仅用于表示,以使输入或输出看起来更好,更易读。

当你这样做时。

int a = 0xff25;

a中实际存储的是位1111111100100101。这些位实际上意味着什么,当您打印它们时,它取决于您。

答案 1 :(得分:0)

在2的补码中,0xFFFF将是-1的表示。如果你有一个包含0xFFFF的变量,你可以像这样分配它:

   int16_t a = -1;
   uint16_t b = a;
   printf("%x %d %d %x", a, a, b, b);

将按如下方式为您打印两种格式。

   ffffffff -1 65535 ffff