大家好,又见面了,我是你们的朋友全栈君。

0x16进制

一个f代表4个1,

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

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

代码语言:javascript代码运行次数:0运行复制#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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145354.html原文链接:https://javaforall.cn