码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-09 23:43:58      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:范围   数据   最小值   十进制   常用   set   出现   数组   eof   

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的赋值(最大值最小值的选择)

标签:范围   数据   最小值   十进制   常用   set   出现   数组   eof   

原文地址:https://www.cnblogs.com/heanda/p/11330009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!