memset 赋值

这几天做图论的 最小生成树和最短路 什么的。

整了整memset,把我对memset的理解说下吧,以后有新体会再加上来。

相信大家都会用string.h下的memset 赋值吧。

很简单,特别是对于搜索时候 vis数组的赋值,最小生成树和最短路的used数组也不错。

但是,都知道memset只能赋0和1,

内部机构是通过按位来实现的。

而这次,来讲一下memset赋大值。

我们可以用memset赋 0xkfkfkfkf 的值(k=1,2,3..7) 后面8,9对于int型有些超范围啊

这样,我们可以给一些数组赋值,

在图论中先对 数组内容赋值,要赋一个很大的值,一般用for循环,

这里,我们就可以用memset 来赋值啦~

之前在博客里我也提到过,赋值0x7fffffff(对于int 型来说 0x7fffffff是最大的数)是不能过的,

因为在里面会有加法,两个这么大的数加起来会成为一个负数,从而影响到题目的答案。

所以,赋值要小于0x7fffffff的一半,而恰巧能通过memset来赋值的。

最大的也就是0x3f3f3f3f,所以可以看到有很多人代码中,

最大值一般用0x3f3f3f3f来表示。

其实,memset是按最后面的来填充。

只管后面的两个字符,然后前面的直接就复制过去。

所以 memset( a,0x3f,sizeof(a) ) 效果等同于 memset( a,0x3f3f3f3f,sizeof(a) )

同理对于,0xnf 等同于 0xnfnfnfnf (n=1,2,3....)

但有时候我们要对数组内容进行比较。

在memset的时候 电脑知道给数组赋值成0x3f3f3f3f 但 比较的时候 0x3f != 0x3f3f3f3f

所以,MAX 设置成0x3f3f3f3f。

当然,如果你不在头声明宏定义或者常量,memset也可以直接用0xnf

还有一点,我说的这些仅仅是对于int类型的测试,double什么的,还没有去测试过~。~

嗯,这就是我对memset的一些新认识,希望可以有点帮助!

memset 赋值

时间: 2024-10-14 05:29:02

memset 赋值的相关文章

memset赋值整形数组出现的问题

#include <iostream> #include <string> using namespace std; int main() { char a[10]; int b[10]; memset(a, '*', sizeof(a)); memset(b, 1, sizeof(b)); cout << a << endl; cout << b << endl; system("pause"); } 输出结果:

关于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   原文地址:https://www.cnblogs.com/DWVictor/p/10295318.html

memset赋值

比较神奇的事情 可能和二进制有关系吧 #include<bits/stdc++.h> using namespace std; int f[1000]; int main(){ memset(f,127,sizeof f); for(int i=0;i<=10;i++) printf("%d ",f[i]);return 0; }结果:2139062143 inf #include<bits/stdc++.h> using namespace std; i

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

memset赋值赋的是ASSCII码转为二进制赋值 比如 memset(,0xff,sizeof()),0xff转为二进制11111111,int为4字节所以最后为11111111111111111111111111111111为-1.(化为二进制补位,然后再赋值). 而OIER通常都希望能够通过memset赋给数组一个最大值 ## 如何定义这个无穷大 这个主要还是看数据范围. 如果直接用int最大值或者和最大值同位数的值作为无穷大的话 比如 2147483647 + 999 爆了int , 它

小学生算术

#include<iostream> #include<memory.h> using namespace std; int main() { char m[4],n[4]; cin>>m>>n; int temp[4]; while(m[0]!='0'&&n[0]!='0') { int N=0; memset(temp,0,sizeof(temp)); for(int i=2;i>=0;i--) { temp[i]=temp[i]+

POJ 3268 Silver Cow Party

Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20274   Accepted: 9278 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X 

hdu 3591 多重加完全DP

题目: The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1997    Accepted Submission(s): 711 Problem Description In the country of ALPC , Xiaoqian is a very famous mathematici

POJ1128

很显然地一个拓扑排序. 根据题意很容易能够构图,由于需要求所有的拓扑序列,于是dfs,我们通过记录edge来修复in[]. 代码质量很烂,vis完全可以用in=-1的情况替代,这里注意到memset赋值的大小问题. 以及一直WA,原因在于,total并没有初始化为零,虽然在最开始初始化了,但是后来会被修改. 这件事情告诉我们,初始化最好还是新建一个函数,在init里初始化,即每次都要初始化,即使是全局变量. 1 /*********************** 2 Accepted 3 Memo

背包问题总结篇

1.混合了贪心思想的背包入门 nefu1028暑假计划 01背包 给定工作开始时间.完成时间.给的工资,工作不能重叠,求最大收益. 一维Dp表示截止到当前时间的最大收益,但是事先要对结构体按结束时间排序,防止前一状态没有值 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int dp[1005]; struct mon