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?
Patrick H. schrieb: > Such mal den Rechner " Speedcrunch ". > Der kann dies meines Wissens. http://speedcrunch.org/userguide/syntax.html
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
man bc schrieb: > > $bc -l <<< "ibase=16;414+E5 - -5.43" > 1278.26 mmh, seltsames Ergebnis :() sollte ja 1278.43 mal forschen...
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.
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.
:
Bearbeitet durch User
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
Daß der integrierte Windows Rechner dies hätte, wäre mir jetzt aber neu.
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 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?
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.
Jetzt streitet Euch mal nicht. Ich meine sowohl eine Desktopanwendung als auch eine Anwendung im Terminal.
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.
:
Bearbeitet durch User
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 = ??
Da muss sich leider ein anderer erbarmen. Bin Grad im Kurzurlaub und hab keinen Laptop dabei.
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.
Du hast zur zweiten Hälfte recht. Der Windows Rechner kann da aber tatsächlich
Ohne Screenshot glaube ich das nicht. Unter Windows 7 ging es definitiv nicht.
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
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.
:
Bearbeitet durch User
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 >> ... 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
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!
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
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
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
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
egal schrieb: > int16 FFFF = −32.768 Bei welcher Zahlendarstellung? Der Windows-Rechner arbeitet im Zweierkomplement, da ist 0xffff == -1.
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:
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
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
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.