0x16进制

一个f代表4个1, 

所以就是2进制的32个1.

但是运行一下下面这个代码就会发现输出的是-1

#include <iostream>

using namespace std;

int main()
{
    int i = 0xffffffff;
    cout << i << endl;
    return 0;
}

结果是 -1 

因为int 为带符号类型,带符号类型最高为是符号位,又因为0xFFFFFFFF,也就是四个字节32 bits全是1, 符号位是1,所以这个数是负数。

内存中的数值为补码表示,所以0xFFFFFFFF是一个负数的补码。负数从补码求原码,最高符号位不变,保持 1, 其余各位求反,末尾加1,也就是 0xFFFFFFFF,二进制为:11111111 11111111 11111111 11111111 

->  10000000 00000000 00000000 00000000

->  10000000 00000000 00000000 00000001

原码首位表示符号位,其余位表示绝对值大小,所以,这个数是 -1