Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: <<<-Basura->>> en 1 Enero 2014, 17:40 PM

Título: valor de Retorno
Publicado por: <<<-Basura->>> en 1 Enero 2014, 17:40 PM
Tengo este código: 

Código (cpp) [Seleccionar]

unsigned short cksum(struct ip *ip, int len){
           long sum = 0;  /* assume 32 bit long, 16 bit short */

           while(len > 1){
             sum += *((unsigned short*) ip)++;
             if(sum & 0x80000000)   /* if high order bit set, fold */
               sum = (sum & 0xFFFF) + (sum >> 16);
             len -= 2;
           }

           if(len)       /* take care of left over byte */
             sum += (unsigned short) *(unsigned char *)ip;
         
           while(sum>>16)
             sum = (sum & 0xFFFF) + (sum >> 16);

           return ~sum;
}


La linea que me interesa es esta:
Código (cpp) [Seleccionar]
return ~sum;

Mi pregunta es que tipo de que cambio ocasiona el símbolo ~, a la hora de hacer el retorno
Título: Re: valor de Retorno
Publicado por: amchacon en 1 Enero 2014, 17:55 PM
Es el complemento a uno del número.

El complemento a uno es cuando en la expresión binaria se invierten las cifras: Se cambian los unos por ceros y los ceros por unos.
Título: Re: valor de Retorno
Publicado por: <<<-Basura->>> en 2 Enero 2014, 18:25 PM
Te refieres a si tengo estos bytes:

00001111

Al yo aplicar el complemento a uno cambiaran a:

11110000

Título: Re: valor de Retorno
Publicado por: amchacon en 2 Enero 2014, 22:50 PM
En efecto ;)