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