PDA

View Full Version : [C] Trova la differenza


MarioMarioMario
15-11-2009, 17:40
Salve, vorrei sapere se riuscite a trovare (se c'è) la differenza tra questi due codici, che per me sono equivalenti. E se vi trovate delle differenze, dirmi quali sono i casi in cui i due codici si comportano in modo differente (per esempio a causa di architetture differenti e così via)

Questo è il codice che a me funziona:

#define SWAP2(a, b) (b = (a + b) - (a = b))
#define MAX 1000000

main()
{
char c1[MAX];
int n1,i,z;

while ((n1=read(0,c1,MAX)))
{
for (i=0;i<(n1-3);i+=4)
{
SWAP2(c1[i],c1[i+1]);
SWAP2(c1[i+2],c1[i+3]);
}
for (z=i;z<(n1-1);z+=2)
{
SWAP2(c1[z],c1[z+1]);
}
write(1,c1,n1);
}
return 0;
}

E questo è il codice, che nel mio pc funziona, però quando lo devo sottomettere nel pc del mio prof (di cui nn so nulla e ne posso accedere all'output generato) mi dice che l'output generato è differente:

#define SWAP2(a, b) ((k)=((a)<<8) | (b))
#define MAX 1000000

main()
{

char c1[MAX];
int n1,i,z;
unsigned short k;


while ((n1=read(0,c1,MAX)))
{
for (i=0;i<(n1-3);i+=4)
{
k^=k;
SWAP2(c1[i],c1[i+1]);
*((unsigned short *)(c1 + i)) = k;
k^=k;
SWAP2(c1[i+2],c1[i+3]);
*((unsigned short *)(c1 + i + 2)) = k;
}
for (z=i;z<(n1-1);z+=2)
{
k^=k;
SWAP2(c1[z],c1[z+1]);
*((unsigned short *)(c1 + z)) = k;
}
write(1,c1,n1);
}
return 0;
}

PS: ho fatto anche altre prove usando queste macro, sempre ottenendo insuccessi:
#define SWAP2(a, b) ((k)=((b)<<8) | (a))
#define SWAP2(a, b) ((k)=((a)>>8) | (b))
#define SWAP2(a, b) ((k)=((b)>>8) | (a))

Ringrazio chiunque mi possa aiutare!!

MarioMarioMario
15-11-2009, 18:20
Salve, vorrei sapere se riuscite a trovare (se c'è) la differenza tra questi due codici, che per me sono equivalenti. E se vi trovate delle differenze, dirmi quali sono i casi in cui i due codici si comportano in modo differente (per esempio a causa di architetture differenti e così via)

Questo è il codice che a me funziona:
codice:

#define SWAP2(a, b) (b = (a + b) - (a = b))
#define MAX 1000000

main()
{
char c1[MAX];
int n1,i,z;

while ((n1=read(0,c1,MAX)))
{
for (i=0;i<(n1-3);i+=4)
{
SWAP2(c1[i],c1[i+1]);
SWAP2(c1[i+2],c1[i+3]);
}
for (z=i;z<(n1-1);z+=2)
{
SWAP2(c1[z],c1[z+1]);
}
write(1,c1,n1);
}
return 0;
}


E questo è il codice, che nel mio pc funziona, però quando lo devo sottomettere nel pc del mio prof (di cui nn so nulla e ne posso accedere all'output generato) mi dice che l'output generato è differente:
codice:

#define SWAP2(a, b) ((k)=((a)<<8) | (b))
#define MAX 1000000

main()
{

char c1[MAX];
int n1,i,z;
unsigned short k;


while ((n1=read(0,c1,MAX)))
{
for (i=0;i<(n1-3);i+=4)
{
k^=k;
SWAP2(c1[i],c1[i+1]);
*((unsigned short *)(c1 + i)) = k;
k^=k;
SWAP2(c1[i+2],c1[i+3]);
*((unsigned short *)(c1 + i + 2)) = k;
}
for (z=i;z<(n1-1);z+=2)
{
k^=k;
SWAP2(c1[z],c1[z+1]);
*((unsigned short *)(c1 + z)) = k;
}
write(1,c1,n1);
}
return 0;
}

PS: ho fatto anche altre prove usando queste macro, sempre ottenendo insuccessi:
#define SWAP2(a, b) ((k)=((b)<<8) | (a))
#define SWAP2(a, b) ((k)=((a)>>8) | (b))
#define SWAP2(a, b) ((k)=((b)>>8) | (a))

Ringrazio chiunque mi possa aiutare!!