大家好,又见面了,我是你们的朋友全栈君。
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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145354.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...