@[呆呆的她啊](/user/226167) 有没有一种可能 0x3f 才60多
by zheng_zx @ 2023-11-29 14:11:29
没有代码片段,不清楚你是什么问题
by zyl1543130456 @ 2023-11-29 14:16:52
@[zheng_zx](/user/1121230) 啊 编译器输出不是吧
by 呆呆的她啊 @ 2023-11-29 14:24:11
@[呆呆的她啊](/user/226167) ?什么意思,就算`unsigned long long`在`memset`中也会爆炸,`memset`的第二个参数并不是赋值为这个参数。你应该是哪里搞错了
```cpp
#include<iostream>
#include<string.h>
using namespace std;
unsigned long long a[114514];
int main(){
memset(a,0x3ffff,sizeof(a));
printf("%d",a[0]);
return 0;
}
```
by _8008008 @ 2023-11-29 14:24:27
@[呆呆的她啊](/user/226167) 我赋的就是 0x3f,A 了的啊
by BIG_CUTE_BUG @ 2023-11-29 14:24:56
@[呆呆的她啊](/user/226167)
不能任意赋值
memset函数是按照字节对内存块进行初始化,所以不能用它将int数组出初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。
其实c的实际范围应该在0~255,因为memset函数只能取c的后八位给所输入范围的每个字节。也就是说无论c多大只有后八位二进制是有效的。
来自[文章](https://blog.csdn.net/weixin_44162361/article/details/115790452?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170122006516800180685206%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170122006516800180685206&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-115790452-null-null.142^v96^pc_search_result_base2&utm_term=memset&spm=1018.2226.3001.4187)
by _8008008 @ 2023-11-29 14:28:07
@[BIG_CUTE_BUG](/user/398983) 用memset是对的 不好意思撒 但是用for就出错了
```c
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
const int n1=2000005;
int d[n1],vis[n1];
int ans[n1];
struct node{
int ne;
};
vector<node>e[2000005];
queue<int>q;
inline int read()
{
int s=0;int w=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-')w*=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void spfa()
{
while(q.size())
{
int u=q.front();
q.pop();
vis[u]=0;
for(auto i:e[u])
{
int v=i.ne;
if(d[v]>d[u]+1)
{
d[v]=d[u]+1;
ans[v]=ans[u];
if(!vis[v]){q.push(v);vis[v]=1;}
}
else if(d[v]==d[u]+1){
ans[v]+=ans[u];
ans[v]=ans[v]%100003;
}
}
}
return ;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u=read();
int v=read();
e[u].push_back((node){v});
e[v].push_back((node){u});
}
// memset(d,0x3f,sizeof(d));
// memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
d[i]=0x3f;
vis[i]=0;
}
ans[1]=1;
d[1]=0;
q.push(1);
vis[1]=1;
spfa();
for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
return 0;
}
```
by 呆呆的她啊 @ 2023-11-29 14:31:32
@[_8008008](/user/803885) 是for循环会出错 但是for循环中改成0x3fffff就对了 why????
by 呆呆的她啊 @ 2023-11-29 14:32:09
@[呆呆的她啊](/user/226167) 同楼上,0x3f 实际的十进制值为 63,所以循环赋值赋进去的只有 63。而 memset 按字节赋值,是每个字节赋上 0x3f,也就是对每个变量的每个字节刚好赋满,是个极大值。
by BIG_CUTE_BUG @ 2023-11-29 14:37:19
@[呆呆的她啊](/user/226167) 你说有没有一种可能,0x3f=63
by ScatteredHope @ 2023-11-29 14:39:41