Foro de elhacker.net

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
  1. unsigned short cksum(struct ip *ip, int len){
  2.           long sum = 0;  /* assume 32 bit long, 16 bit short */
  3.  
  4.           while(len > 1){
  5.             sum += *((unsigned short*) ip)++;
  6.             if(sum & 0x80000000)   /* if high order bit set, fold */
  7.               sum = (sum & 0xFFFF) + (sum >> 16);
  8.             len -= 2;
  9.           }
  10.  
  11.           if(len)       /* take care of left over byte */
  12.             sum += (unsigned short) *(unsigned char *)ip;
  13.  
  14.           while(sum>>16)
  15.             sum = (sum & 0xFFFF) + (sum >> 16);
  16.  
  17.           return ~sum;
  18. }
  19.  

La linea que me interesa es esta:
Código
  1. 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 ;)