为什么输出显示为无符号数字

时间:2015-10-12 12:41:06

标签: c++

我将无符号数组转换为带sscanf函数的整数,但是我得到了无符号数?

int arr[3];
    unsigned char* tmp = "1223FFFF2222;
            for (int i = 0; i < 3; i++){
                sscanf((const char*)tmp, "%4x", &arr[i]);
                tmp += 4;
            }
            std::cout << "X: " << std::dec << arr[1] << " ";

输出X:65535,应为-1

1 个答案:

答案 0 :(得分:3)

很可能是因为你的整数超过16位宽。 0x8000-0xffff范围内的二进制补码数仅对16位数字为负。

对于32位(甚至64位)整数的更可能的情况(现在),它只是一个小的正数。