Forum: PC-Programmierung Taschenrechner in Hex/binär


von Andreas B. (bitverdreher)


Lesenswert?

Hallo,
gibt es eigentlich einen Taschenrechner unter Linux, der Binär und Hex 
Darstellung und außerdem noch mit signed/unsigned Datentypen umgehen 
kann?
Ersteres ist einfach, letzteres habe ich nicht gefunden.

Gruß
Andreas

von hunsbuckel (Gast)


Lesenswert?


von Andreas B. (bitverdreher)


Lesenswert?

hunsbuckel schrieb:
> http://manderc.com/concepts/umrechner/index.php

Ja, Danke! Aber ich wollte nicht umrechnen, sondern tatsächlich mit den 
Werten rechnen. Grundrechenarten reichen dabei aus.
Idealerweise sollte es auch möglich sein, mit gemischten Datentypen zu 
rechnen. Also z.B. Eingabe (int16_t) 0x414 + (uint8_t) 0xE5 - (double) 
-5.43
(Die Notation ist jetzt nur ein Beispiel)

von TestX (Gast)


Lesenswert?

python interactive cli

von Andreas B. (bitverdreher)


Lesenswert?

TestX schrieb:
> python interactive cli

Wie geht da signed/unsigned bei einer Hexzahldarstellung?
Die Ausgabe ist ja nur in dezimal oder täusche ich mich da?

von Patrick H. (hoppi123)


Lesenswert?

Such mal den Rechner " Speedcrunch ".
Der kann dies meines Wissens.

von Rolf M. (rmagnus)


Lesenswert?

Wenn auch online ok ist: http://calc.penjee.com/

von Patrick H. (hoppi123)


Lesenswert?

Patrick H. schrieb:
> Such mal den Rechner " Speedcrunch ".
> Der kann dies meines Wissens.


http://speedcrunch.org/userguide/syntax.html

von Zeno (Gast)


Lesenswert?

Wozu braucht man da einen speziellen Rechner? Das eine sind normale 
Ganzzahlen, das andere sind Gleitkommazahlen und damit kann jeder 
Taschenrechner umgehen. Der einzige Unterschied ist der Wertebereich der 
Zahlen, was dem Rechner aber völlig Rille ist.

So etwas braucht kein Mensch.

Wenn Du so etwas wirklich brauchst, dann verdrehe mal selbst die Bits 
und schreibe Dir so einen Rechner.

von Michael B. (laberkopp)


Lesenswert?

Andreas B. schrieb:
> Wie geht da signed/unsigned bei einer Hexzahldarstellung?

Es gibt kein signed/unsigned bei Hexadezimal. Das hat kein Minuszeichen.

Man müsste die Stellenanzahl wissen, um das höchstwertige bit zum sign 
bit zu erklären, und dann noch Einerkomplement oder Zweoerkomplement 
einstellen.

Aber du willst nicht vorher jedesmal die Stellenanzahl, ob nur 2, 4 oder 
8 hex-Stellen, eingeben.

Mein Hex-Rechner arbeitet mit 10 Stellen. Tippt man FFFFF... ein, 
behandelt der die auch wie negative Zahlen, weil es beim 2er-Komplement 
keinen Unterschied macht wenn man Überläufe ignoriert.

Nachkommastellen hat man übrigens auch nicht, 1.5 hinzaddieren kann bei 
Hex-Anzeige kein Ergebnis ergeben weil kein Float oder Fixpunktformat 
dargestellt wird sondern nur 10 Hex-Stellen.

Wenn du Float in Hex dargestellt haben willst: Einfach in einem Debugger 
angucken, dann siehst du, daß du mit der Darstellung nichts anfangen 
kannst. Zumal Taschenrechner mit BCD rechnen.

von Rolf M. (rmagnus)


Lesenswert?

Michael B. schrieb:
> Andreas B. schrieb:
>> Wie geht da signed/unsigned bei einer Hexzahldarstellung?
>
> Es gibt kein signed/unsigned bei Hexadezimal. Das hat kein Minuszeichen.

Warum nicht?

> Man müsste die Stellenanzahl wissen, um das höchstwertige bit zum sign
> bit zu erklären, und dann noch Einerkomplement oder Zweoerkomplement
> einstellen.
>
> Aber du willst nicht vorher jedesmal die Stellenanzahl, ob nur 2, 4 oder
> 8 hex-Stellen, eingeben.
>
> Mein Hex-Rechner arbeitet mit 10 Stellen. Tippt man FFFFF... ein,
> behandelt der die auch wie negative Zahlen, weil es beim 2er-Komplement
> keinen Unterschied macht wenn man Überläufe ignoriert.

Nur bei Addition und Subtraktion.

> Nachkommastellen hat man übrigens auch nicht, 1.5 hinzaddieren kann bei
> Hex-Anzeige kein Ergebnis ergeben weil kein Float oder Fixpunktformat
> dargestellt wird sondern nur 10 Hex-Stellen.

Prinzipiell könnte man auch hexadezimale Kommazahlen machen, nur werden 
die im Rechner so nirgends verwendet.

von Andreas B. (bitverdreher)


Lesenswert?

Patrick H. schrieb:
> Such mal den Rechner " Speedcrunch ".
> Der kann dies meines Wissens.

Nein, leider nicht.


Zeno schrieb:
> Wozu braucht man da einen speziellen Rechner? Das eine sind normale
> Ganzzahlen, das andere sind Gleitkommazahlen und damit kann jeder
> Taschenrechner umgehen.

Du kennst den Unterschied zwischen signed und unsigned?

Michael B. schrieb:
> Andreas B. schrieb:
>> Wie geht da signed/unsigned bei einer Hexzahldarstellung?
>
> Es gibt kein signed/unsigned bei Hexadezimal. Das hat kein Minuszeichen.

Natürlich, das ist die Zweierkomplementdarstellung

>
> Man müsste die Stellenanzahl wissen, um das höchstwertige bit zum sign
> bit zu erklären, und dann noch Einerkomplement oder Zweoerkomplement
> einstellen.
>
> Aber du willst nicht vorher jedesmal die Stellenanzahl, ob nur 2, 4 oder
> 8 hex-Stellen, eingeben.

Doch, genau das oder eben halt auf den Typ bei der Eingabe casten

> Mein Hex-Rechner arbeitet mit 10 Stellen. Tippt man FFFFF... ein,
> behandelt der die auch wie negative Zahlen, weil es beim 2er-Komplement
> keinen Unterschied macht wenn man Überläufe ignoriert.

10 Stellen entspricht halt keinen Datentyp, den man in C verwendet. Hier 
wäre eine Einstellung auf 8, 16 oder 32 Bit sinnvoll

>
> Nachkommastellen hat man übrigens auch nicht, 1.5 hinzaddieren kann bei
> Hex-Anzeige kein Ergebnis ergeben weil kein Float oder Fixpunktformat
> dargestellt wird sondern nur 10 Hex-Stellen.

Das müßte dann logischerweise auch in float angezeigt werden.

> Wenn du Float in Hex dargestellt haben willst: Einfach in einem Debugger
> angucken, dann siehst du, daß du mit der Darstellung nichts anfangen
> kannst.

Wenn man weiß wie float dargestellt wird, schon.

> Zumal Taschenrechner mit BCD rechnen.

Deswegen suche ich ja einen speziellen Rechner.

Hintergrund ist einfach die Berechnung in einem C Programm zwecks 
Fehlersuche nachzuvollziehen. Er soll einfaćh das machen was ein C 
Programm ebenfalls tut. Netterweise auch noch Überläufe anzeigen.

von man bc (Gast)


Lesenswert?

Andreas B. schrieb:

> Also z.B. Eingabe (int16_t) 0x414 + (uint8_t) 0xE5 - (double) -5.43
> (Die Notation ist jetzt nur ein Beispiel)

bc?

$bc -l <<< "ibase=16;414+E5 - -5.43"
1278.26

von man bc (Gast)


Lesenswert?

man bc schrieb:

>
> $bc -l <<< "ibase=16;414+E5 - -5.43"
> 1278.26

mmh, seltsames Ergebnis :() sollte ja 1278.43
mal forschen...

von Ralf D. (doeblitz)


Lesenswert?

Andreas B. schrieb:
> Also z.B. Eingabe (int16_t) 0x414 + (uint8_t) 0xE5 - (double)
> -5.43

wcalc kann das:
1
% wcalc
2
Enter an expression to evaluate, q to quit, or ? for help:
3
-> 0x414 + 0xe5 - -5.43
4
 = 1278.43
5
->

Homepage: http://w-calc.sourceforge.net/

Unter Debian einfach als "wcalc" installierbar.

von Zeno (Gast)


Lesenswert?

Andreas B. schrieb:
> Zeno schrieb:
>> Wozu braucht man da einen speziellen Rechner? Das eine sind normale
>> Ganzzahlen, das andere sind Gleitkommazahlen und damit kann jeder
>> Taschenrechner umgehen.
>
> Du kennst den Unterschied zwischen signed und unsigned?

Sicher! Sind halt beides Ganzzahlen. Man beginnt damit ab der 1.Klasse 
zu rechnen - zumindest was unsigned betrifft.

Achja auch signed und unsigned unterscheiden sich eben nur im 
Wertebereich, nämlich genau um eine Zweierpotenz.

von Karl M. (Gast)


Lesenswert?

Hallo Andreas B.,

auch wenn es an deiner Fragestellung etwas vorbei geht,
ich verwende immer noch einen einen HP 16C mit intern 64Bit 
Berechnungen.

Siehe: https://en.wikipedia.org/wiki/HP-16C

Falls Du einen erstehen kannst, dann ist er für Dich die Lösung.

von René H. (Gast)


Lesenswert?

dc

Grüsse,
René

von Zeno (Gast)


Lesenswert?

Karl M. schrieb:
> auch wenn es an deiner Fragestellung etwas vorbei geht,
> ich verwende immer noch einen einen HP 16C mit intern 64Bit
> Berechnungen.
>
> Siehe: https://en.wikipedia.org/wiki/HP-16C
>
> Falls Du einen erstehen kannst, dann ist er für Dich die Lösung.

Prinzipiell hast Du mit Deinem Vorschlag ja recht, aber das ist nicht 
das was der TO möchte.
Er möchte Hirn ausschalten und der Rechner soll ihm sagen ob -85 int_8 
oder auch signed char ist.

von Walter K. (Gast)


Lesenswert?

Zeno schrieb:
> Karl M. schrieb:
> auch wenn es an deiner Fragestellung etwas vorbei geht,
> ich verwende immer noch einen einen HP 16C mit intern 64Bit
> Berechnungen.
> Siehe: https://en.wikipedia.org/wiki/HP-16C
> Falls Du einen erstehen kannst, dann ist er für Dich die Lösung.
>
> Prinzipiell hast Du mit Deinem Vorschlag ja recht, aber das ist nicht
> das was der TO möchte.
> Er möchte Hirn ausschalten und der Rechner soll ihm sagen ob -85 int_8
> oder auch signed char ist.

In C ist char immer signed!

- es sei denn man schreibt unsigned davor

von sumo (Gast)


Lesenswert?

Walter K. schrieb:
> In C ist char immer signed!

Es geht ihm aber nicht nur um 'char':

Andreas B. schrieb:
> Idealerweise sollte es auch möglich sein, mit gemischten Datentypen zu
> rechnen. Also z.B. Eingabe (int16_t) 0x414 + (uint8_t) 0xE5 - (double)
> -5.43
> (Die Notation ist jetzt nur ein Beispiel)

von (º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· (Gast)


Lesenswert?

> Prinzipiell könnte man auch hexadezimale Kommazahlen machen, nur werden
> die im Rechner so nirgends verwendet.

Doch doch, Mann sieht das Komma nur nicht:

Ein Beispiel in Q27:
-0.245656 wird zu: 0x708E543


Gruesse an die beirische Trinkerrunde in Eching!

von Rolf M. (rmagnus)


Lesenswert?

Walter K. schrieb:
> In C ist char immer signed!

Nein, ist es nicht!

von Walter K. (Gast)


Lesenswert?

(º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· schrieb im Beitrag 
#5310895:
> Prinzipiell könnte man auch hexadezimale Kommazahlen machen, nur
> werden die im Rechner so nirgends verwendet.
>
> Doch doch, Mann sieht das Komma nur nicht:
>
> Ein Beispiel in Q27:
> -0.245656 wird zu: 0x708E543
>
> Gruesse an die beirische Trinkerrunde in Eching!

Und ich hatte jetzt schon in der hex Zahl nach den Ziffern 2e 
(dezimalpunkt ascii) gesucht

Duck & weg

von Andreas B. (bitverdreher)


Lesenswert?

Zeno schrieb:

> Er möchte Hirn ausschalten und der Rechner soll ihm sagen ob -85 int_8
> oder auch signed char ist.

Du hast es immer noch nicht kapiert. Welcher Datenbtyp das ist, bestimme 
ich selbst (das kann der Rechner nicht wissen). Es geht auch nicht 
darum, das umzurechnen, sondern mit verschiedenen Datentypen zu rechnen.
Ich könnte es auch auf dem Papier machen. So wie die letzten 30 Jahre. 
Komfortabel ist das allerdings nicht.

Karl M. schrieb:
> Hallo Andreas B.,
>
> auch wenn es an deiner Fragestellung etwas vorbei geht,
> ich verwende immer noch einen einen HP 16C mit intern 64Bit
> Berechnungen.

Ich habe noch einen HP28C in der Schublade, den ich seit dem Studium 
nicht mehr benutzt habe. Muß den mal wieder mit Batterien befüttern und 
schauen ob der so etwas kann. Aber ich habe es so nicht in Erinnerung.

von Michael B. (laberkopp)


Lesenswert?

Andreas B. schrieb:
> Deswegen suche ich ja einen speziellen Rechner.

Nein, nicht wirklich.

Du möchtest daß er rechnet aber du möchtest dir nicht den Overhead 
antun, die Datentypen jedesmal mit einzugeben und den Ansichtstypen vom 
Ergebnis.

> Hintergrund ist einfach die Berechnung in einem C Programm zwecks
> Fehlersuche nachzuvollziehen.

Nennt man C Debugger. Der weiss schon, von welchem Datentyp die Werte 
sind.

Es gibt sogar C Interpreter.

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Michael B. schrieb:
> Du möchtest daß er rechnet aber du möchtest dir nicht den Overhead
> antun, die Datentypen jedesmal mit einzugeben und den Ansichtstypen vom
> Ergebnis.

Habe ich das gesagt? Nein!
Natürlich muß man dabei den Datentyp angeben. Daher auch das Beispiel 
mit den casten.

> Nennt man C Debugger. Der weiss schon, von welchem Datentyp die Werte
> sind.

Habe ich aber nicht. Der gdb-avr ist halt sehr beschränkt.
Und debuggen ist etwas anderes als rechnen. Obwohl er dabei auch schon 
helfen würde.

von Wolfgang H. (drahtverhau)


Lesenswert?

Der To fragt nach einem Taschenrechner für den Desktop und bekommt jede 
Menge scheiß als Antwort. Hätte ihm ja gern den Tipp gegeben er soll den 
im BS integrierten nutzen... Der kann das alles was er will... Aber er 
hat ja Linux. Vermutlich bleibt wohl nur selber machen übrig

von Andreas B. (bitverdreher)


Lesenswert?

Daß der integrierte Windows Rechner dies hätte, wäre mir jetzt aber neu.

von fuck windows and it's users. (Gast)


Lesenswert?

Wolfgang H. schrieb:
> Der To fragt nach einem Taschenrechner für den Desktop ..

Hat er nicht.

> Menge scheiß als Antwort. Hätte ihm ja gern den Tipp gegeben er soll den
> im BS integrierten nutzen... Der kann das alles was er will... Aber er
> hat ja Linux. Vermutlich bleibt wohl nur selber machen übrig

Was soll der Scheiss?



Extcalc
SpeedCrunch
GMT
Qalculate!
galculator
rpCalc
Nonpareil
...

von Kastanie (Gast)


Lesenswert?

fuck windows and it's users. schrieb:
> Wolfgang H. schrieb:
>> Der To fragt nach einem Taschenrechner für den Desktop ..
>
> Hat er nicht.

Naja, im Eröffnungspost, erster Satz, schreibt er, er was für Linux.
Das impliziert eigentlich schon eine Desktopanwendung.

von Andreas B. (bitverdreher)


Lesenswert?

Kastanie schrieb:
> Naja, im Eröffnungspost, erster Satz, schreibt er, er was für Linux.
> Das impliziert eigentlich schon eine Desktopanwendung.

Stimmt. Und alles was ich da auf den Desktop gesehen habe (incl.den 
Windows calculator) erfüllt die Anforderungen eben nicht.

Der Windows Rechner rechnet mit signed Werten (daher auch die 
einstellbare Datenbreite), der Linux (Gnome) calculator rechnet nur mit 
unsigned.

Mal als Beispiel (damit es klarer wird):

beide Werte 16-bit signed: 2 - FFFF = 3
beide Werte 16-bit unsigned: 2 - FFFF = -FFFD (hier braucht es ein 
Vorzeichen um mit unsigned eine negative Zahl darzustellen -> Overflow)

von Rolf M. (rmagnus)


Lesenswert?

Wolfgang H. schrieb:
> Der To fragt nach einem Taschenrechner für den Desktop und bekommt jede
> Menge scheiß als Antwort. Hätte ihm ja gern den Tipp gegeben er soll den
> im BS integrierten nutzen... Der kann das alles was er will... Aber er
> hat ja Linux.

Jetzt musst du nur noch das Betriebssystem nennen, bei dem der 
eingebaute Taschenrechner auch unsigned rechnen kann. Aber von dir 
bekommt er leider auch nur:

Wolfgang H. schrieb:
> jede Menge scheiß als Antwort

Kastanie schrieb:
> Naja, im Eröffnungspost, erster Satz, schreibt er, er was für Linux.
> Das impliziert eigentlich schon eine Desktopanwendung.

Hä? Wie das?

von georg (Gast)


Lesenswert?

Rolf M. schrieb:
> Kastanie schrieb:
>> Naja, im Eröffnungspost, erster Satz, schreibt er, er was für Linux.
>> Das impliziert eigentlich schon eine Desktopanwendung.
>
> Hä? Wie das?

Logisches Denken: Da er "für Linux" schreibt, will er den Rechner sicher 
nicht wirklich in die Tasche stecken (oder hast du eine 
Westentaschenlinux in deiner Jacke), also sucht er sowas wie den 
Windows-Taschenrechner, aber für Linux. Und das IST eine 
Desktop-Anwendung.

Hat ja auch jeder sonst hier verstanden.

Georg

von Kastanie (Gast)


Lesenswert?

Rolf M. schrieb:
> Hä? Wie das?

Rolf M. schrieb:
> Kastanie schrieb:
>> Naja, im Eröffnungspost, erster Satz, schreibt er, er was für Linux.
>> Das impliziert eigentlich schon eine Desktopanwendung.
>
> Hä? Wie das?

Naja, meine Grammatik. Ich habe das Wort "sucht" irgendwie vergessen.
Sorry...

Also nochmal:
Naja, im Eröffnungspost, erster Satz, schreibt er, er SUCHT was für 
Linux.
Das impliziert eigentlich schon eine Desktopanwendung.

von Andreas B. (bitverdreher)


Lesenswert?

Jetzt streitet Euch mal nicht. Ich meine sowohl eine Desktopanwendung 
als auch eine Anwendung im Terminal.

von sumo (Gast)


Lesenswert?

Kastanie schrieb:
> Naja, im Eröffnungspost, erster Satz, schreibt er, er SUCHT was für
> Linux.
> Das impliziert eigentlich schon eine Desktopanwendung.

Ist dir irgendwann mal der Gedanke gekommen, daß es auch einige wenige 
Programme für die Kommandozeile unter Linux gibt ;-)))

von Zeno (Gast)


Lesenswert?

Andreas B. schrieb:
> Du hast es immer noch nicht kapiert. Welcher Datenbtyp das ist, bestimme
> ich selbst (das kann der Rechner nicht wissen). Es geht auch nicht
> darum, das umzurechnen, sondern mit verschiedenen Datentypen zu rechnen.
> Ich könnte es auch auf dem Papier machen. So wie die letzten 30 Jahre.
> Komfortabel ist das allerdings nicht.

Du kapierst es nicht! Es ist völlig wurscht ob man 123 einem int_8, 
einem uint_8, einem int_16 oder einem long oder ... oder zuordnet. 
Mathematisch führt das immer zum gleichen Ergebnis.
Es gibt nur das Problem wenn man 123 (int_8) und 247 (uint_8) addiert, 
weil das Rechenergebnis weder in einen uint_8 und schon gar nicht in 
einen int_8 rein passt. Für die Ergebnisvariable muß es dann halt ein 
int_16 sein.
Dafür braucht man weder Papier noch einen speziellen Taschenrechner, da 
reicht im Normalfall das Hirn völlig aus.
Man braucht auch kein uint_8 oder int_8. Die in C definierten Basistypen 
(signed) char bzw. unsigned char reichen eigentlich völlig aus. Bei der 
Notation mit int und uint sieht man halt sofort die Größe der benutzten 
Variable, d.h. die Lesbarkeit ist besser, aber wirklich brauchen tut man 
es nicht. Ich persönlich benutze lieber die Basistypen wie char, 
unsigned char usw.. Aber das ist Ansichtssache und jeder darf es so 
machen wie es ihm gefällt.

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

gnome-calculator und sonst bc

von Zeno (Gast)


Lesenswert?

Andreas B. schrieb:
> beide Werte 16-bit signed: 2 - FFFF = 3
> beide Werte 16-bit unsigned: 2 - FFFF = -FFFD (hier braucht es ein
> Vorzeichen um mit unsigned eine negative Zahl darzustellen -> Overflow)

Mit unsigned kannst Du keine negativen Zahlen darstellen. Das Ergebnis 
mußt Du schon einem 32Bit integer zuweisen. Und auch Dein Beispiel ist 
mit den Regeln der Mathematik ohne Hirnakrobatik einfach zu rechnen

von Andreas B. (bitverdreher)


Lesenswert?

Zeno schrieb:

> Du kapierst es nicht! Es ist völlig wurscht ob man 123 einem int_8,
> einem uint_8, einem int_16 oder einem long oder ... oder zuordnet.
> Mathematisch führt das immer zum gleichen Ergebnis.

Nein, nochmal: ich möchte nachvollziehen, was ein Programm rechnet.
Beispiel: a sei int_16 und hat den Wert F8 woher immer der auch kommt. 
Dann macht es sher wohl einen Unterschied bei der nachfolgenden 
Rechnung, ob das nur ein signed oder unsigned ist. Siehe das letzte 
Beispiel.

> Andreas B. schrieb:
>> beide Werte 16-bit signed: 2 - FFFF = 3
>> beide Werte 16-bit unsigned: 2 - FFFF = -FFFD (hier braucht es ein
>> Vorzeichen um mit unsigned eine negative Zahl darzustellen -> Overflow)
>
> Mit unsigned kannst Du keine negativen Zahlen darstellen.

Daher auch das Minuszeichen und die Bemerkung in Klammern "Overflow". 
Liest Du eigentlich was ich schreibe?
Ich ziehe von einer 2 (unsigned) eine FFFF (unsigned) ab. Auch wenn es 
unsigned ist, ist eine Substraktion dieser beiden Zahlen durchaus 
erlaubt. Das Ergebnis ist eben eine negative Zahl, die sich mit unsigned 
eben nicht darstellen läßt.

> Das Ergebnis
> mußt Du schon einem 32Bit integer zuweisen. Und auch Dein Beispiel ist
> mit den Regeln der Mathematik ohne Hirnakrobatik einfach zu rechnen.

Das Beispiel ist eben nur ein Beispiel. Damit man es eben ohne 
Hirnakrobatik sofort sehen kann.

: Bearbeitet durch User
von Lacher (Gast)


Lesenswert?

Muhaha,

40 Beiträge für einen Taschenrechner unter Linux.

 Mit Windows eine das nicht passiert. Der aktuellen Version liegt einer 
bei, der das alles kann.

von Lacher (Gast)


Lesenswert?

Blöde Autokorrektur vom Handy.....

von Andreas B. (bitverdreher)


Lesenswert?

Lacher schrieb:
> Muhaha,
>
> 40 Beiträge für einen Taschenrechner unter Linux.
>
>  Mit Windows eine das nicht passiert. Der aktuellen Version liegt einer
> bei, der das alles kann.

Dann zeig mal einen Screenshot mit folgenden beiden Rechnungen:
beide Werte 16-bit signed: 2 - FFFF = ??
beide Werte 16-bit unsigned: 2 - FFFF = ??

von Lacher (Gast)


Lesenswert?

Da muss sich leider ein anderer erbarmen. Bin Grad im Kurzurlaub und hab 
keinen Laptop dabei.

von Andreas B. (bitverdreher)


Lesenswert?

Lacher schrieb:
> Da muss sich leider ein anderer erbarmen. Bin Grad im Kurzurlaub und hab
> keinen Laptop dabei.

Also doch nur Dummschwatz. Hast wohl mal was von Linux gelesen und 
dachtest Du könntest jetzt mal kurz rumstänkern.

von Lacher (Gast)


Lesenswert?

Du hast zur zweiten Hälfte recht.

Der Windows Rechner kann da aber tatsächlich

von Andreas B. (bitverdreher)


Lesenswert?

Ohne Screenshot glaube ich das nicht. Unter Windows 7 ging es definitiv 
nicht.

von man bc (Gast)


Angehängte Dateien:

Lesenswert?

Andreas B. schrieb:
> Ohne Screenshot glaube ich das nicht. Unter Windows 7 ging es definitiv
> nicht.

Einer-, Zweierkomplent, festlegbare Wortbreite, ... ?
Kein Standard klickibuntirechner kann das.

Oh moment :)

https://www.hpcalc.org/details/2813
(die vorletzte Version, danach sind die voyager-roms nicht dabei)

handbuch  HP-16C  pdf/djvu
https://archive.org/download/hp-16c_handbook/hp16c.pdf
https://archive.org/download/hp-16c_handbook/hp16c.djvu


und falls man mathematisch da was auffrischen muss  :)
https://www.ntu.edu.sg/home/ehchua/programming/java/DataRepresentation.html

von Zeno (Gast)


Lesenswert?

Andreas B. schrieb:
> Nein, nochmal: ich möchte nachvollziehen, was ein Programm rechnet.
> Beispiel: a sei int_16 und hat den Wert F8 woher immer der auch kommt.
> Dann macht es sher wohl einen Unterschied bei der nachfolgenden
> Rechnung, ob das nur ein signed oder unsigned ist. Siehe das letzte
> Beispiel.

Ich habe nie bestritten das es einen Unterschied macht ob man mit signed 
oder unsigned rechnet.

Andreas B. schrieb:
> Daher auch das Minuszeichen und die Bemerkung in Klammern "Overflow".
> Liest Du eigentlich was ich schreibe?

Das es bei so einer Rechnung zum Overflow kommt ist logisch und braucht 
es keinen extra Hinweis.

Wenn Du unbedingt so einen Rechner brauchst, da schau Dich mal nach 
Emulatoren für Taschenrechner um. Gerade für die vielen HP-Modelle gibt 
es da jede Menge Emulatoren für iOS, Android und PC, auch für den hier 
mehrfach empfohlenen HP-16C (5,50€ für iOS). Nutze selbst diverse 
Emulatoren auf dem iPhone.

von Andreas B. (bitverdreher)


Lesenswert?

man bc schrieb:
>
> und falls man mathematisch da was auffrischen muss  :)
> https://www.ntu.edu.sg/home/ehchua/programming/java/DataRepresentation.html

Danke, aber das war ja nicht das Problem. Auf den Papier kann ich es ja. 
Es  ging mir ja auch nur um eine Arbeitserleichterung.
Aber die SW schaue ich mir mal an. Danke!

Zeno schrieb:
> Ich habe nie bestritten das es einen Unterschied macht ob man mit signed
> oder unsigned rechnet.

Das hat sich aber bei Dir so angehört (und nicht nur bei Dir):

> Du kapierst es nicht! Es ist völlig wurscht ob man 123 einem int_8,
> einem uint_8, einem int_16 oder einem long oder ... oder zuordnet.
> Mathematisch führt das immer zum gleichen Ergebnis.

Daher auch eine weiteren Ausführungen.

Es geht ja auch nicht darum, daß ich unbedingt so einen Rechner brauche. 
Aber bei den vollkritzeln des Schmierpapiers kam mir der Gedanke daß es 
einen solchen Rechner im Jahre 2018 ja wohl in der Weiten des 
Internetzes geben müßte und fragte mal in die Runde. Daß sich der Thread 
so entwickelt, habe ich auch nicht gedacht.

von Günter Lenz (Gast)


Lesenswert?

Python lässt sich interaktiv, quasi wie ein Taschenrechner nutzen
und alles mogliche damit berechnen. Wenn nicht genau das geht,
wie du es wünscht, kann man daß aber mit wenigen Programmzeilen
erreichen.

von Roland E. (roland0815)


Lesenswert?

Mein Schulrechner Casio fx-9? kann dec/hex/oct/bin rechnen und 
umwandeln. Bisher hat das immer gereicht..

PS: der win7 Bordrechner kann das inzwischen auch. Der iOS interne auch. 
Kann mir nicht vorstellen dass $Unix da passen muss, zumal iOS ja ein 
BSD ist.

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Roland E. schrieb:
> Mein Schulrechner Casio fx-9? kann dec/hex/oct/bin rechnen und
> umwandeln. Bisher hat das immer gereicht..
>
> PS: der win7 Bordrechner kann das inzwischen auch. Der iOS interne auch.
> Kann mir nicht vorstellen dass $Unix da passen muss, zumal iOS ja ein
> BSD ist.

Das Thema wurde hier schon durch gekaut. Es geht um die signed / 
unsigned Datentypen. Und die haben alle diese Rechener eben nicht.

von georg (Gast)


Lesenswert?

Andreas B. schrieb:
> Es geht um die signed /
> unsigned Datentypen. Und die haben alle diese Rechener eben nicht.

Nicht nur das, eine App die das leisten soll was der TO braucht müsste 
auch alle Fallen und Nebenwirkungen nachbilden, die sich bei C aus 
unbewussten oder absichtlichen Castings auch bei allen möglichen 
Zwischenwerten ergeben - im Prinzip eine umfangreiche aber lösbare 
Aufgabe, wenn man ganz genau das Programm eingibt um das es geht 
(C-Compiler). Das braucht aber kein Mensch als Taschenrechner, wenn ein 
Programmierer das nicht sowieso beherrscht greift er zum Debugger, oder 
er erschiesst sich.

Georg

von Peter D. (peda)


Lesenswert?

Ich nehme immer den Rechner-Plus von Windows.
Bei Hex, Okt, Bin kannst Du mit Vorzeichen eingeben, das Ergebnis ist 
immer unsigned. Du kannst auch festlegen, ob auf 8, 16, 32 oder 64Bit 
abgeschnitten wird.

von Andreas B. (bitverdreher)


Lesenswert?

georg schrieb:
> Andreas B. schrieb:
>> Es geht um die signed /
>> unsigned Datentypen. Und die haben alle diese Rechener eben nicht.
>
> Nicht nur das, eine App die das leisten soll was der TO braucht müsste
> auch alle Fallen und Nebenwirkungen nachbilden, die sich bei C aus
> unbewussten oder absichtlichen Castings auch bei allen möglichen
> Zwischenwerten ergeben - im Prinzip eine umfangreiche aber lösbare
> Aufgabe, wenn man ganz genau das Programm eingibt um das es geht
> (C-Compiler).

Endlich versteht mich jemand.
Das bezieht sich aber auch nicht nur auf C, aber dort eben besonders.

> Das braucht aber kein Mensch als Taschenrechner, wenn ein
> Programmierer das nicht sowieso beherrscht greift er zum Debugger, oder
> er erschiesst sich.

Ah, Du machst also nie Fehler. Schön für Dich.
Nochmal: Ich kann das auf den Papier. Aber Du wirst doch zugeben, daß 
ein  Rechner dafür etwas komfortabler ist.

von man bc (Gast)


Lesenswert?

Andreas B. schrieb

>> ... LINUX ...
> .... Papier  ...
>  .... Rechner ...

Idee!? emacs-calc, kenne das im Speziellen aber aber nicht.

https://florian.adamsky.it/2016/03/31/emacs-calc-for-programmers-and-cs.html

von Andreas B. (bitverdreher)


Lesenswert?

man bc schrieb:
> https://florian.adamsky.it/2016/03/31/emacs-calc-f...

Das habe ich mir gerade mal angeschaut und es sieht interessant aus. Da 
muß ich mich mal mit beschäftigen. (bin kein  emacs nerd ;-) )  Danke!

von Bernd K. (prof7bit)


Lesenswert?

Andreas B. schrieb:
> TestX schrieb:
>> python interactive cli
>
> Wie geht da signed/unsigned bei einer Hexzahldarstellung?
> Die Ausgabe ist ja nur in dezimal oder täusche ich mich da?
1
>>> import numpy as np
2
3
>>> np.int16(0xffff)
4
-1
5
>>> np.uint16(0xffff)
6
65535
7
>>> np.uint16(-1)
8
65535
9
>>> np.uint8(-1)
10
255
11
>>> hex(np.uint8(-1))
12
'0xff'
13
>>> np.uint16(-42)
14
65494
15
>>> bin(np.uint16(-42))
16
'0b1111111111010110'
17
>>> bin(np.uint8(-42))
18
'0b11010110'
19
>>> hex(np.uint8(-42))
20
'0xd6'
21
>>> np.int8(0xd6)
22
-42
23
>>> np.uint8(0xd6)
24
214

Bester Taschenrechner der Welt. Passt nur leider nicht in die Tasche.

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Bernd K. schrieb:
> Andreas B. schrieb:
>> TestX schrieb:
>>> python interactive cli
>>
>> Wie geht da signed/unsigned bei einer Hexzahldarstellung?
>> Die Ausgabe ist ja nur in dezimal oder täusche ich mich da?
>>>> import numpy as np
>>>> ....

Gewußt wie. Das sieht super und auch sehr intuitiv aus. Ebenfalls Danke!

Die Tasche brauche ich dazu nicht. ;-)

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Andreas B. schrieb:
> Also z.B. Eingabe (int16_t) 0x414 + (uint8_t) 0xE5 - (double) - 5.43

Das sieht nach C[++] aus. Warum lässt du nicht einfach den Compiler für
dich rechnen? Dann hast du Dinge wie Integer-Promotion, implizite
Typkonvertierungen, Rundungen u.v.m. gleich mit erschlagen.

Ich habe mal versucht, dieses einigermaßen komfortabel mit Bash und GCC
umzusetzen (s. Anhang). Das Ganze ist eine interaktive Shell, in der
C[++]-Ausdrücke eingegeben werden können. Die folgenden Beispiele geben
einen Eindruck davon, was damit alles möglich ist:

Beispiel aus deinem zweiten Beitrag:
1
> (int16_t) 0x414 + (uint8_t) 0xE5 - (double) - 5.43
2
  = 1278.43
3
  = 0x1.3f9b851eb851fp+10
4
  Typ: double

Integer-Arithmetik:
1
> 3-6
2
  = -3
3
  = 0xfffffffd
4
  Typ: int
5
> 3-(unsigned)6
6
  = 4294967293
7
  = 0xfffffffd
8
  Typ: unsigned int
9
> 100000*100000
10
  = 1410065408
11
  = 0x540be400
12
  Typ: int
13
> 1<<40
14
  = 0
15
  = 0x0
16
  Typ: int
17
> 1L<<40
18
  = 1099511627776
19
  = 0x10000000000
20
  Typ: long
21
> (uint8_t)10*(uint8_t)100
22
  = 1000
23
  = 0x3e8
24
  Typ: int
25
> (uint8_t)(10*100)
26
  = 232
27
  = 0xe8
28
  Typ: unsigned char

Floating-Point-Arithmetik:
1
> 1.1*1.1
2
  = 1.21
3
  = 0x1.35c28f5c28f5dp+0
4
  Typ: double
5
> 1.1f*1.1
6
  = 1.21
7
  = 0x1.35c28fccccccdp+0
8
  Typ: double
9
> 1.1f*1.1f
10
  = 1.21
11
  = 0x1.35c29p+0
12
  Typ: float
13
> 1/0.0
14
  = inf
15
  Typ: double
16
> sqrt(-1)
17
  = -nan
18
  Typ: double


Zeichen und Strings:
1
> 'A'
2
  = 'A'
3
  = 65
4
  = 0x41
5
  Typ: char
6
> (char)(0x40+24)
7
  = 'X'
8
  = 88
9
  = 0x58
10
  Typ: char
11
> "Apfel" "kuchen"
12
  = "Apfelkuchen"
13
  Typ: char [12]
14
> "Apfelkuchen"+5
15
  = "kuchen"
16
  Typ: char const*

: Bearbeitet durch Moderator
von Karl (Gast)


Angehängte Dateien:

Lesenswert?

Andreas B. schrieb:
> Dann zeig mal einen Screenshot mit folgenden beiden Rechnungen:
> beide Werte 16-bit signed: 2 - FFFF = ??
> beide Werte 16-bit unsigned: 2 - FFFF = ??

Bitte.

Und das ist nichtmal das "aktuelle" Windows, das ist Win7.

von egal (Gast)


Lesenswert?

Karl schrieb:
> Andreas B. schrieb:
>> Dann zeig mal einen Screenshot mit folgenden beiden Rechnungen:
>> beide Werte 16-bit signed: 2 - FFFF = ??
>> beide Werte 16-bit unsigned: 2 - FFFF = ??
>
> Bitte.

bitte was?
>
> Und das ist nichtmal das "aktuelle" Windows, das ist Win7.


int16  FFFF =  −32.768  ; 2+32.768 = 32.770  0x8002

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

egal schrieb:
> int16  FFFF =  −32.768

Bei welcher Zahlendarstellung?

Der Windows-Rechner arbeitet im Zweierkomplement, da ist 0xffff == -1.

von Andreas B. (bitverdreher)


Lesenswert?

Yalu X. schrieb:
> Das sieht nach C[++] aus.
Soll in diesem Fall für C sein, macht aber trotzdem keinen Unterschied. 
Es geht mir mehr um einen universellen Binärrechner

Dein Script liefert mir immer den Fehler:
./ccalc: 6: ./ccalc: history: not found
./ccalc: 7: read: Illegal option -e
./ccalc: 1: ./ccalc: history: not found

Danke für die Mühe! Investiere da aber nicht zuviel Zeit.
Der Python Rechner mit numpy, den mir Bernd gezeigt hat, ist prima.

Karl schrieb:
> Bitte.
>
> Und das ist nichtmal das "aktuelle" Windows, das ist Win7.

Ich erhalte bei der Eingabe 2 - FFFF in den Win7 Rechner immer 3. Wo ist 
dort die Umschaltung auf unsigned Argumente?
Der Standard Gnome Rechner ist übrigens weitaus umfangreicher, aber das 
nur am Rande.

egal schrieb:
> int16  FFFF =  −32.768  ; 2+32.768 = 32.770  0x8002

Aha.
Ich habe den Eindruck daß sich hier in diesem Thread einige tummeln, die 
grundlegende Probleme bei der binären Zahlendarstellung haben. Muß ja 
nicht jeder alles wissen, aber dann bitte die Füße stillhalten und nicht 
antworten. Danke!

von Yalu X. (yalu) (Moderator)


Lesenswert?

Andreas B. schrieb:
> Dein Script liefert mir immer den Fehler:
> ./ccalc: 6: ./ccalc: history: not found
> ./ccalc: 7: read: Illegal option -e
> ./ccalc: 1: ./ccalc: history: not found

Mist, der Shebang war falsch. Die erste Zeile sollte

  #!/bin/bash

statt

  #!/bin/sh

lauten. Bei mir hat das trotzdem funktioniert, da /bin/sh ein Link auf
/bin/bash ist. Bei einigen Linux-Distributionen zeigt /bin/sh aber auf
/bin/dash oder eine andere Einfach-Shell, die keine Comandline-History
hat. Ich habe den Fehler im Anhang meines obigen Beitrags behoben

> Ich erhalte bei der Eingabe 2 - FFFF in den Win7 Rechner immer 3. Wo ist
> dort die Umschaltung auf unsigned Argumente?

Bei 16-Bit-Arithmetik (also im "Word"-Modus) stimmt das ja auch. Im
"Dword"-Modus sollte allerdings FFFF0003 (oder dezimal -65533)
herauskommen.

Hier ist noch die Ausgabe meines ccalc-Skripts für verschiedene
Varianten des Audrucks:

1
> 2-0xffff
2
  = -65533
3
  = 0xffff0003
4
  Typ: int
5
> 2u-0xffff
6
  = 4294901763
7
  = 0xffff0003
8
  Typ: unsigned int
9
> (int16_t)(2-0xffff)
10
  = 3
11
  = 0x3
12
  Typ: short
13
> (uint16_t)(2-0xffff)
14
  = 3
15
  = 0x3
16
  Typ: unsigned short

: Bearbeitet durch Moderator
von Andreas B. (bitverdreher)


Lesenswert?

Yalu X. schrieb:
>> Ich erhalte bei der Eingabe 2 - FFFF in den Win7 Rechner immer 3. Wo ist
>> dort die Umschaltung auf unsigned Argumente?
>
> Bei 16-Bit-Arithmetik (also im "Word"-Modus) stimmt das ja auch.

Das habe ich ja nicht bezweifelt. Der Gnome Rechner rechnet prinzipiell 
mit unsigned und der Win7 Rechner prinzipiell mit signed. Ich spreche 
die ganze Zeit von einem Rechner wo dies umschaltbar ist, was hier 
einige nicht verstehen (wollen?).

> Im "Dword"-Modus sollte allerdings FFFF0003 (oder dezimal -65533)
> herauskommen.

Und im unsigned Modus sind es eben -FFFD, also Fehler.


Mit der bash funktioniert es übrigens bei mir jetzt auch. Das ist mir 
auch nicht aufgefallen. Allerdings muß ich jetzt dazu noch C++ 
installieren.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Andreas B. schrieb:
>> Im "Dword"-Modus sollte allerdings FFFF0003 (oder dezimal -65533)
>> herauskommen.
>
> Und im unsigned Modus sind es eben -FFFD, also Fehler.

Ich würde das nicht als Fehler ansehen, sondern eher als eine Frage der
Darstellung von negativen Zahlen. Eine negative Zahl kann u.a.

- klassisch (mit Minuszeichen bei negativen Zahlen),
- im Einerkomplemnt oder
- im Zweierkomplement

dargestellt werden.

Der Windows-Rechner stellt im Hex-Modus negative Zahlen offensichtlich
im Zweierkomplement dar.

In Python wird die klassische Darstellung gewählt, was u.a. damit
zusammenhängt, dass dort der int-Typ keine feste Bitbreite hat, was
aber eine Voraussetzung für die Zweierkomplementdarstellung wäre.

In C und in C++ wird die Ausgabe negativer Zahlen im Hexadezimalsystem
gar nicht erst angeboten.

Welchen Nutzen würdest du denn aus einer vorzeichenbehafteten Hex-
Darstellung ziehen? Ich selber nutze die Hex-Darstellung nur dann, wenn
mich die einzelnen Bits einer Zahl interessieren. Dafür  wäre aber die
Darstellung mit Minuszeichen äußerst hinderlich.

von Andreas B. (bitverdreher)


Lesenswert?

Yalu X. schrieb:
> Ich würde das nicht als Fehler ansehen, sondern eher als eine Frage der
> Darstellung von negativen Zahlen.

Ja gut, aber wenn die Zahl als unsigned in C oder Assember dargestellt 
wird, ist das ein Fehler. OK, bei Assembler wertet man das Carrybit aus.
Einerkomplement ist ja eher unüblich. Außer, daß man zu Anbeginn der 
Zeit mal Computer gebaut hat, die mit solchen Zahlen rechnen, fällt mir 
jetzt kein Anwendungsbeispiel ein.

> Welchen Nutzen würdest du denn aus einer vorzeichenbehafteten Hex-
> Darstellung ziehen? Ich selber nutze die Hex-Darstellung nur dann, wenn
> mich die einzelnen Bits einer Zahl interessieren. Dafür  wäre aber die
> Darstellung mit Minuszeichen äußerst hinderlich.

Mir wäre für negative Zahlen die 2er Komplementdarstellung die 
nützlichste.
Konkret ging es mir aktuell darum (schon auf den Papier gelöst) das 
auslesen nebst Korrektur von Sensoren zu programmieren (C mit GCC). Da 
fallen halt unterschiedliche Datentypen dabei an.
Natürlich war die Ausgabe anfangs nicht korrekt. So habe ich einfach 
nachgerechnet was mein Programm da macht. Dabei fiel mir auf daß ein 
Wert statt uint, int definiert war. Das ist mal ein Anwendungsbeipiel.
Weiter möchte ich bei solchen Programmen auch mit verschiedenen 
Eingabewerten alle möglichen Ausgaben nachvollziehen. Und das ginge mit 
einen solchen Rechner halt bequemer.

Ich programmiere meist AVRs mit make und gcc. Debuggen bringt meiner 
Meinung nach meist auch nicht viel bei der Mikrocontrollerprogrammierung 
weil man es doch oft mit Timingproblemen zu tun hat. Einfach mal so 
anhalten um Werte anzugucken ist da nicht.

Und ich werde mir jetzt auch bestimmt nicht Windows dazu kaufen, um mir 
dann ein aufgeblasenes AVR Studio darauf zu installieren, nur um einen 
Debugger zu haben.

von Oliver S. (oliverso)


Lesenswert?

Bei der ganzen Diskussion hier bleibt die eingentlich entscheidende 
Frage auf der Strecke:

Wozu in aller Welt braucht man sowas?

Es ist schon ein Hinweis, daß es sowas nicht gibt.
Zur Not tippt man die eine Zeile in ein C-Programm, und lässt das kurz 
laufen. Der Compiler wirds schon richtig hinbekommen.

Oliver

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Oliver S. schrieb:
> Wozu in aller Welt braucht man sowas?

Habe ich gerade erklärt.

> Es ist schon ein Hinweis, daß es sowas nicht gibt.

Nö, es wurde ja bereits gezeigt:
man bc: Emacs calc
Bernd K. : Python mit numpy <- der ist wirklich gut

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.