总结
无穷大
首先: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));
0(10)=000000000000000000000000 00000000(2)
赋值后也是0(10)=000000000000000000000000 00000000(2)
十进制0的二进制每一位都是0,用0赋值没有问题
为什么1不可以呢
memset(a,1,sizeof(a));
1(10)=000000000000000000000000 00000001(2)
赋值后16843009(10)=00000001 00000001 00000001 00000001(2)
为什么无穷大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位
赋值后1061109567(10)=00111111 00111111 00111111 00111111(2)
memset(a,0x7fffffff,sizeof(a))
赋值前:0x7fffffff(16)=2147483647(10)=01111111 11111111 11111111 11111111(2)
赋值后:11111111 11111111 11111111 11111111(2)爆了Int,