# Dezimalzahl invertieren



## wasserflasche (9. Juni 2004)

Hi,
gibt es eine einfachere Möglichkeit eine Dezimalzahl zu invertieren..

oder muss ich sie wirklich erst in Binärumwandeln ->invertieren ->und wieder zurückkonvertieren?
wenn ja, wie invertiere ich dann ein binärzahl?

danke für eure antworten
viele grüße,
Christina


----------



## Shakie (9. Juni 2004)

Also eine Binärzahl zu invertieren sollte nich so schwer sein, wenn du sie als String bearbeitest. Man muss blos alle 1er durch 0er und umgekehrt ersetzen. Dann wird du zum Beispiel aus "1001" der Wert "0110" bzw "110".
Das könnte man zum Beispiel so machen:
	
	
	



```
Dim strBinär As String
strBinär = Replace(strBinär, "0", "blub")
strBinär = Replace(strBinär, "1", "0")
strBinär = Replace(strBinär, "blub", "1")
```

Edit: Ein Tutorial zum Wandeln von Dezimal in Binär findest du hier oder auch hier!


----------



## danielm (10. Juni 2004)

erm... is ne invertierte dezimal zahl nicht einfach +/- ?!


----------



## Shakie (10. Juni 2004)

ähm...jetzt irritierst du mich. Kann schon sein...Ich dachte immer, beim Invertieren wird der Binärwert umgedreht. Was genau verstehst du denn unter Invertieren? Aus Plus mach Minus?


----------



## danielm (10. Juni 2004)

*kopfkratz*
invertieren heißt doch eigentlich nix anderes als das gegenteil von etwas...

im dualsystem is das gegenteil von "0" "1" und umgekehrt und im dezimalsystem is doch das gegenteil von +1 -1 oder net?! ka dachte ich mir nur so


----------



## Shakie (10. Juni 2004)

Also wenn du lediglich aus Plus Minus machen willst, dann musst du ja blos deine Zahl mit -1 multiplizieren! Aber wenn du eine binärzahl wandelst indem du aus "0" "1" machst, dann kommt was anderes raus mit dem GLEICHEN Vorzeichen. Wozu brauchst du das denn?


----------



## Carndret (10. Juni 2004)

Beim Invertieren von Binärzahlen wird die 1 zur 0 und umgekehrt. D.h. du musst die Binärzahl einfach mit einem NOT bearbeiten. Wie das in VB geht weiß ich leider nicht, aber dazu wird sicher etwas in der Hilfe stehen.

Beim Invertieren kommt es auf den Zahlenraum an. Wenn du z.B. von 0 (BIN: 000) bis 7 (BIN: 111) deinen Zahlenraum hast und dann eine Zahl zwischen drin invertierst dann kommt z.B. bei der 6 (110) eine 1 (001) raus und bei 5 (101) eine 2 (010) usw.


----------



## Dario Linsky (10. Juni 2004)

Kleines Beispiel:
Invertieren wir mal die binäre Darstellung von 10:
10 im Dezimalsystem ist 00001010 im Binärsystem.
Subtrahiert man von diesem Wert jetzt den Maximalwert in der gleichen Größenordnung (1 Byte), dann kriegt man als Ergebnis folgendes:

```
00001010  | 10d
- 11111111  | 255d
  --------
  11110101 | (-)245d bzw
```

Rein rechnerisch ließe sich das generell lösen, indem man folgende Dinge beachtet:
1. Wie groß ist der Betrag der zu invertierenden Zahl?
2. Wieviele Bytes muss man sich zur Hand nehmen, um die Zahl zu invertieren?

Wie wir ja (hoffentlich) alle wissen, ist der maximale Wert in einem Byte 2^8-1.  Der Maximalwert in zwei Bytes ist 2^16-1. Und so weiter.
Wenn man also weiß, in welchem Größenbereich die Zahl liegt, kann man daraus den Maximalwert der benötigten Bytes errechnen und diesen von der Ausgangszahl subtrahieren.

Ich hoffe mal, dass das genau das war, was du wolltest und natürlich, dass das einigermaßen verständlich ausgedrückt war.


----------

