利用memset 赋值无穷大和无穷小

memset赋值赋的是ASSCII码转为二进制赋值
比如 memset(,0xff,sizeof()),0xff转为二进制11111111,int为4字节所以最后为11111111111111111111111111111111为-1。(化为二进制补位,然后再赋值)。
而OIER通常都希望能够通过memset赋给数组一个最大值
## 如何定义这个无穷大
这个主要还是看数据范围。
如果直接用int最大值或者和最大值同位数的值作为无穷大的话
比如 2147483647 + 999
爆了int , 它就会从我们定义的无穷大变成负无穷大,这不满足我们的期望。
所以到底该用什么来当这个 —— 无穷大
经常会看到大佬啊神犇啊会用:
memset( , 0x3f , sizeof );
特意去试了下,发现 0x3f3f3f3f 真的是个非常精巧的常量
他的十进制是 1061109567也就是10^9级别的(和0x7fffffff一个数量级),作为一个oier, 一般场合下的题目数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形
因为0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))(memset按字节赋值)。

也可

memset(a,127,sizeof(a));
即得到无穷大。
memset(a,128,sizeof(a));
即得到无穷小,与上述的值互为相反数。
memset(a,60,sizeof(a));
即近似为第一个式子的数值的一半。
memset(a,0,sizeof(a));赋值0
memset(a,-1,sizeof(a));赋值-1
上述例子对于a数组为int或long long时,成立。

//所以在通常的场合下,0x3f3f3f3f真的是一个非常棒的选择。
 
//其他常用赋值:
 
memset(arr,0x7F,sizeof(arr)); //它将arr中的值全部赋为2139062143,这是用memset对int赋值所能达到的最大值
 
memset(arr,0x80,sizeof(arr)); //set int to -2139062144 //赋负值
 
//给double赋值:
memset(arr,0x7F,sizeof(arr)); //set double to 1.38242e+306
memset(arr,0xFE,sizeof(arr)); //set double to -5.31401e+303

转载于:https://www.cnblogs.com/heanda/p/11330009.html

你可能感兴趣的:(memset,无穷大,无穷小)