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

代码语言:javascript复制 (1)正数的补码与原码相同;

(2)负数的符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1,即为其补码。 (总的来说:补码=原码取反+1,只不过负数带有符号位需特殊考虑。。。)

---------------------------------------------------------------------------------------------------------------------------------

0xffffffff是多少?

0xffffffff表示的是一个十六进制数

1.将其转换为十进制数

0xffffffff=16x10^7+16x10^6+...+16x10^0=4294967295

2.将其转换为二进制数

十六进制转换为二进制就是直接把每位转换成二进制就可以了

f(15)变成二进制:1111,则

0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111 (8个F的二进制形式, 一个F占4个字节 )

即32位数都是1的二进制数

0x代表16进制,后面是数字,十进制是4294967295

#include

int main()

{

int i =0xffffffff;

unsigned int j = 0xffffffff;

printf("i: %u %d\n",i ,i);

printf("j: %u %d\n",j ,j);

printf("-1: %u\n",-1);

return 0;

}

/*

我擦,终于想通了带符号的int变量i当以“%u”(无符号格式)输出时,把最高位符号位给算进去了

所以 i和j “%u”的相同。

-1的补码,计算机中符号数以补码形式存放即:

1111 1111 1111 1111 1111 1111 1111 1111 (32位)

当以无符号输出时也是: 4294967295

*/

有图有真相:

int、unsigned int、long int、long long 类型的最大值和最小值:

#include

#include

using namespace std;

int main (){

cout<< numeric_limits::max() << endl;

cout<< numeric_limits::max() <

cout<< numeric_limits::max() <

cout<< numeric_limits::max() <

cout<<"-----------------------------"<

cout<< numeric_limits::min() << endl;

cout<< numeric_limits::min() <

cout<< numeric_limits::min() <

cout<< numeric_limits::min() <

return 0;

} 本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除前往查看全栈本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!

全栈