Tengo este código:
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:
return ~sum;
Mi pregunta es que tipo de que cambio ocasiona el símbolo ~, a la hora de hacer el retorno
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.
Te refieres a si tengo estos bytes:
00001111
Al yo aplicar el complemento a uno cambiaran a:
11110000
En efecto ;)