Umwandlung von int in Binär-string zu int mit 2 ergänzen

Es ist ein Binär-string 10001110 was ich weiß, ist mit 2 ergänzen. Ich weiß, es werden 8 bits.

Es ist mir in der form eines unsigned int entspricht 142.

Ich dann umwandeln müssen, diese zurück zu 10001110

dann umkehren aller bits und addieren einer wodurch es entsprechend 01110010

und dann konvertieren Sie diese zu einem signed int entspricht -114.

Wie kann ich dies tun? Ich bin relativ neu in C und habe Ewigkeiten versucht, um es herauszufinden!

Im wesentlichen will ich eine Funktion schreiben, die den unsigned int 142 und gibt den signed int -114

  • Und es werden immer 8 bit? Oder was?
  • Ja, in diesem Fall weiß ich, dass es 8 bits. Ich möchte in der Lage sein, um übergeben Sie diese als parameter an die Funktion.
  • Nicht 01110010 nur 114 (nicht -114)?
  • 1) zu konvertieren unsigned char, 2) Verwendung der bitweisen Verknüpfung mit "nicht", 3) konvertieren int.
  • vergessen Sie "hinzufügen" 😉
  • ja 01110010 ist 114 aber die tatsächliche Zahl, die gespeichert wurde, wird -114, weil es war 2 ' s Kompliment
  • Das ist nicht klar: 142 ist eigentlich -114. Wenn Sie invertieren die bits und fügen Sie Sie bekommen 114. So würde die Funktion take 142 und zurück 114, nicht -114. Wenn diese falsch ist, dann müssen Sie klären Ihre Frage.
  • FYI: es sind zwei die sich ergänzen, nicht Kompliment (keine 2 immer ein Kompliment mich auf etwas 🙁 ).
  • Nur damit Sie wissen, wenn value ist definitiv 8-bits in Größe, mit und ohne Vorzeichen, dann int x = (((int)value + 128) & 0xff) - 128; . Es gibt schnellere Möglichkeiten, als auch, kann ich mir vorstellen...so wie die Subtraktion von 256, wenn Wert >= 128.
  • Ja, sehr -- danke!

Schreibe einen Kommentar