关于memset的赋值(最大值最小值的选择)

Posted heanda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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按字节赋值)。

所以在通常的场合下,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

以上是关于关于memset的赋值(最大值最小值的选择)的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中选择具有一个最大值但另一个最小值的项目 [关闭]

如何使用 LINQ 选择具有最小或最大属性值的对象

matlab的编程问题,求关于平均数,最小值,最大值,方差等简单的数据处理的程序。

取最大值(最小值)简介代码

添加标记列的最大值和最小值的列

int数据类型的最大值的加上1变成负的最小值的问题的解释...