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

# memset批量赋值

时间:2020-01-15 13:35:58      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:循环   数组初始化   sizeof   需要   mem   eof   补码   memset   ems   

memset数组初始化

首先memset是对字节操作的,一个字节有8位二进制,这是常识,相信大家都知道。

比如:
memset(dp,0,sizeof(dp))
int类型的变量一般占用4个字节,对每一个字节赋值0的话就变成了“00000000 00000000 000000000 00000000” (即10进制数中的0)
赋值为-1的话,放的是 “11111111 11111111 11111111 11111111 ”( 11111111为十进制的-1)

赋值0和-1比较基础,但是有的时候需要批量赋值成一个很大的数或者很小的数,使用for循环赋值效率不如memset

对此,有如下做法:

  • 赋值极小数
    如果放128 ,二进制表示为10000000,则放的是10000000 10000000 10000000 10000000
    因为最高位是1 所以是负数,因为这是补码,还原成原码是-2139062144,这样就可以讲数组初始化为一个很小的数。

  • 赋值极大数
    • 如果一个字节的值位127,二进制表示为01111111,则放的是01111111 01111111 01111111 01111111 转化后是2139062143,这样就可以讲数组初始化为一个很大的值
    • 但是比较常用的是使用0x3f(0011 1111),赋值之后近似无穷大,并且两个数相加不会爆int,实现无穷大+无穷大=无穷大

# memset批量赋值

标签:循环   数组初始化   sizeof   需要   mem   eof   补码   memset   ems   

原文地址:https://www.cnblogs.com/sstealer/p/12196074.html

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