0x3f3f3f3f无穷大的来源+memset的应用

总结

无穷大

首先:0x表示16进制 inf=0x3f3f3f3f
所以:0x3f3f3f3f(16)=1061109567(10)=00111111 00111111 00111111 00111111(2)
这就是为什么inf+inf也不会爆int,上面的二进制就很明显的看出来,每8位是26-1(10)=11111100(2)

然后:0x7fffffff(16)=2147483647(10)=01111111 11111111 11111111 11111111(2)
这是Int的最大值,为啥最左一位不是一呢?最左一位作为符号位(+ or -)

memset函数

这个函数可以方便我们很多,但是这个函数是按照**字节赋值**
字节赋值:
是取一个数二进制的最右8位进行赋值,也就是取Int得第一个字节来赋值
int是32位,4字节,memset是按照每字节赋值的,这就是为什么我们用十进制赋值达不到我们想要的结果!

为什么0可以呢

memset(a,0,sizeof(a));
010=000000000000000000000000 000000002)
赋值后也是010=000000000000000000000000 000000002

十进制0的二进制每一位都是0,用0赋值没有问题

为什么1不可以呢

memset(a,1,sizeof(a));
110=000000000000000000000000 000000012)
赋值后1684300910=00000001 00000001 00000001 000000012

为什么无穷大0x3f3f3f3f可以用memset,但是0x7fffffff不行

memset(a,0x3f3f3f3f,sizeof(a))==memset(a,0x3f,sizeof(a))=memset(a,1<<6-1,sizeof(a))==memset(a,63,sizeof(a));
按字节赋值取得是一个数的二进制最右的8位
赋值后106110956710=00111111 00111111 00111111 001111112memset(a,0x7fffffff,sizeof(a))
赋值前:0x7fffffff16=214748364710=01111111 11111111 11111111 111111112)
赋值后:11111111 11111111 11111111 111111112)爆了Int,
发布了130 篇原创文章 · 获赞 5 · 访问量 5003

猜你喜欢

转载自blog.csdn.net/weixin_44224825/article/details/104106555