Un point court en C contient 16 bits et le premier bit indique si la valeur est négative ou positive. J'ai un programme C qui est comme suit:C Convertir un court-circuit court en point non signé
int main() {
short int v;
unsigned short int uv;
v = -20000;
uv = v;
printf("\nuv = %hu\n", uv);
return 0;
}
Puisque la valeur de v est que je sais négatif le premier bit de la variable est un 1. J'attendre la sortie du programme à égal uv = 52,768 b/c 20,000 + (2^15) = 52,768.
Au lieu de cela, j'obtiens uv = 45536 comme sortie. Quelle partie de ma logique est incorrecte?
Les numéros sont stockés dans le complément à 2 (https://en.wikipedia.org/wiki/Two%27s_complement). Donc, le plus grand nombre non signé (0xFFFF) est en fait -1 – twain249
Les nombres négatifs ne sont pas représentés en définissant simplement le dernier bit. Ils sont représentés en tant que complément binaire, c'est-à-dire tous les bits annulés plus un. Voir http://stackoverflow.com/questions/1049722/what-is-2s-complement – Marian
@Marian Ce message était incroyablement utile. Merci! – RyeGuy