注册 登录
编程论坛 C++教室

向大佬求助,关于 0x7f问题

AK46 发布于 2019-05-05 10:05, 2625 次点击
如果我用 memset函数,将a[1000][1000]这个int型数组赋值成0x7f,那么,if(a[i][j] < 0x7f)这个语句中的0x7f是memset函数中给数组附的那个值么?
谢谢大佬,
4 回复
#2
rjsp2019-05-05 11:01
听不懂,为什么不能少说话多贴代码?

我猜(也只能瞎扯),你的意思想问:
int a;
memset( &a, 0x7f, sizeof(a) );
之后,a等于多少?

不是,因为 memset 是对字节赋值,假如 sizeof(int)是2的话,那a就是 0x7F7F;如果 sizeof(int)是8的话,那a就是 0x7F7F7F7F7F7F7F7F;……
#3
AK462019-05-05 14:16
回复 2楼 rjsp
额,这样说吧,就是在memset函数里用到 0x7f 与在其他语句中的0x7f一样么?
应为我知道在memset中,0x7f很大,但要是单独输出0x7f的话是127,
代码如下
——————————————————————————
#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 1000;
int a[MAX][MAX],b[MAX],n,m,x,y,num;
bool f[MAX];
int main()
{
    cin>>m>>n;
    memset(a,0x7f,sizeof(a));
    memset(b,0x7f,sizeof(b));            //本行的0x7f
    memset(f, 1, sizeof(f));   
    for(int i = 1;i<= n;i++)
    {
        cin>>x>>y>>num;
        a[x][y]  = num;
    }
   
    int r,s;
    int i = r,k = 0,minn = 0x7f;
    b[r] = 0;
    f[r] = 1;
    while()
    {
        k = 0;
        for(int j = 1;j<= n;j++)
        {
            if(a[i][j] < 0x7f)                //这一行的0x7f与上面memset中赋给数组的值是否一样?
        }
    }
    return 0;
}
#4
rjsp2019-05-05 14:31
你说的我听不懂,我说的你也听不懂

我的意思是,假设(只是假设)你的平台上int占4个字节。
那么 memset(a,0x7f,sizeof(a)); 相当于
a[0][0] = 0x7F7F7F7F;
a[0][1] = 0x7F7F7F7F;
a[0][2] = 0x7F7F7F7F;
……
而不是相当于
a[0][0] = 0x7F;
a[0][1] = 0x7F;
a[0][2] = 0x7F;
……
#5
AK462019-05-05 14:36
回复 4楼 rjsp
蟹蟹大佬,你的意思就是说   a[0][0] > 0x7f  ,memset并没有复制成127,而是把它与平台上的字节相对应,对么?如果是的话,我想我应该懂了

[此贴子已经被作者于2019-5-5 14:44编辑过]

1