Pour fond, je suis en train de calculer une somme de contrôle pour un paquet IP qui est stocké dans la mémoire constante (ne peut pas le modifier en place). Avant de faire la somme de contrôle, je suis censé faire semblant la somme de contrôle existant dans le paquet est 0. Plutôt que de copier toutes les données de mémoire tampon temporaire, et stocker 0, je voudrais faire une somme de contrôle de l'ensemble du paquet, puis soustrayez la somme de contrôle existante à partir du résultat.les compléter de 0 - 0
Pour ce faire, je cherchais une version de complément de la soustraction que j'ai trouvé here. Malheureusement, si je l'utiliser, et soustraire 0 de 0, je reçois 0x1111 au lieu de l'attendre 0:
- Convertir 0 à son complément: [1111]
- Ensuite, nous ajoutons 0: [1111]
- pas peu de trop-plein, donc nous avons fini ...
Je me serais attendu à 0 - 0 à 0 - ce que je manque?
Il y a deux représentations de 0 en complément à: +0 (0000) et -0 (1111). –
Qu'est-ce que le complément vous achète? –
Au lieu de copier le tampon entier, vous pouvez sauvegarder la somme de contrôle actuelle, la mettre à 0, calculer la somme de contrôle, puis remettre l'original, en supposant que vous ne voulez pas utiliser la nouvelle somme de contrôle que vous avez calculée. – clcto