0x16进制

一个f代表4个1,

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

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

#include

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