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
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)
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?
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.
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.
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.
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.
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
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.
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.
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.
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
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)
> 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!
(º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· 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
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.
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.
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.
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
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
...
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.
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)
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 AntwortKastanie schrieb:> Naja, im Eröffnungspost, erster Satz, schreibt er, er was für Linux.> Das impliziert eigentlich schon eine Desktopanwendung.
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?
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
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.
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 ;-)))
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.
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
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.
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.
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 = ??
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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. ;-)
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:
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.
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
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!
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:
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.
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.
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.
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
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