Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 487
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Gibt es einen Anwendungsfall so Funktionen zu überschreiben? Hätte jetzt erwartet, dass man da keinen VTableeintrag braucht; dann könnte man das auch rausoptimieren.
XML/JSON in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Dafür musst du feststellen, dass das Objekt auch nicht von außerhalb (durch globale Funktionen) zur Verfügung gestellt wird. Aliasing-Analyse ist in C/C++ berüchtigt schwierig.

Unter Windows kommt erschwerend hinzu, dass virtuelle Funktionen für COM-Objekte genutzt werden und die Interfaces zerstört würden, wenn der Compiler ungenutzte virtuelle Funktionen wegoptimieren würde. Unter Linux hat man dynamisches Linken, das sowas unmöglich macht.

Deshalb habe ich Devirtualisierung und entsprechende Optimierungen bisher nur entweder auf globalen oder lokalen Variablen gesehen (und auch nur, sofern keine externen Funktionsaufrufe in der Nähe waren), aber nie, sobald dynamisch allokierter Speicher ins Spiel kam.

Was die Design-Notwendigkeit betrifft, sowas zu überschreiben: Viele Dateiformate sind Node-basiert. Da werden Konzepte wie Kamera, Meshes, Gruppen gern von einer Node-Basisklasse abgeleitet, weil das Design des Formats das auch stark begünstigt. Dann hat man echte Polymorphie, und wenn jemand read() und write() in die Basisklasse haut, ist das gute OOP und furchtbare Modularisierung.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 487
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Der VTable-Alias-Teil war mir klar; das mit den Nodes nicht, sehe ich aber ein. Dann muss man die wirklich komplett trennen. Der Read/Write für die Gesamtdatei wäre dann aber wieder einfach eine statische Funktion.
XML/JSON in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Mirror
Establishment
Beiträge: 184
Registriert: 25.08.2019, 05:00
Alter Benutzername: gdsWizard
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Mirror »

Mir ist wieder mal eine Festplatte kaputt gegangen. Also habe ich eine Neue bestellt und sie ist heute gekommen. Leider ging diese beim ersten formatieren kaputt und wird jetzt nicht mehr erkannt. Ich weis nicht, aber gefühlt jede neue 3.Platte ist kaputt. Jedenfalls fühlt es sich so an.
Na gut, jetzt darf ich zur Post und muss auch noch den Rückversand bezahlen. Das ist ärgerlich.
ehemals gdsWizard, http://www.mirrorcad.com
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Visual Studio Preview kommt nun mit Rechtschreibkorrektur.

Ich wollte mal nicht so alt und verkrustet sein wie sonst und dachte mir: Ich vertippe mich tatsächlich oft und merk’s erst drei Jahre später; könnte endlich mal ein nützliches Feature sein!

Also Preview gesaugt und installiert und erste Datei geöffnet und … alles ist rot.

Der Spell Check kennt kein isn’t. Er erwartet isn't.

Das Apostroph anstelle des Hochkommas wird nicht verstanden.

Fuck.

Aber es gibt einen Workaround! Ihr könnt die Wörter in eine Liste eintragen, damit sie als korrekt erkannt werden. Das geht nicht via GUI, weil der Spell Checker isn’t mit Apostroph nicht als zusammenhängendes Wort erkennt und stattdessen isn whitelisten will.
Visual Studio will consider any word that appears in this exclusion.dic file as a correctly spelled word. Note that the exclusion.dic file must be UTF16 with BOM encoding to work correctly.
HAHAHAHA OMG I CAN’T EVEN

Microsoft hat Spell Checking seit 1991. Auf dem PC; auf dem Tablet; in der Cloud; via Wörterbuch; via KI. Aber trotzdem muss der User im Jahr 2023 erstmal lernen, was UTF-16 ist und was eine Byte Order Mark.

(Falls ihr findet, ich bin zu pedantisch, Apostroph statt Hochkomma zu verwenden: Jedes Mac-basierte System wandelt das beim Tippen so um, und selbst Microsofts eigene Office-Suite tut das.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Autokorrektur durch Snoop Dogg:
Bild

Das erste Problem ist, dass die Korrektur viel zu viel Zustand hat. Bei vielen Dateien scheint sie überhaupt nicht anzuspringen?! Obwohl da eindeutig Fehler sind?!
In anderen Dateien wird ein Wort in dem einen Kommentar als Fehler markiert, im anderen nicht.
Die False-Positive-Rate sank nach den ersten Dateien drastisch. Aber ich vermute, dass einfach die gesamte Meldungsrate sank, inklusive True Positives. Ich kann kein Muster erkennen. Ich dachte erst an KI, aber dann würden nicht ständig printf und const angemeckert?!

Zweiter Kritikpunkt: Die Scroll-Leiste in Visual Studio ist mittlerweile so bunt, dass es keinen Spaß mehr macht:
Bild
Die roten Stellen sind Fehler (mutmaßlich). Die grünen Stellen sind fehlende Funktionsdefinitionen (mutmaßlich). Die blauen Stellen sind Rechtschreibfehler (mutmaßlich). Die grauen Stellen sind Verbesserungsvorschläge und statische Analyse (meist unbrauchbar). Hätte ich was korrigiert, wären da noch hellblaue Stellen (nicht eingecheckte Änderungen). TURN UP THE NOISE

Alles in allem: 50 Vertipper gefunden in 104.000 Zeilen C++; dabei um die 2000 False Positives mental ignoriert.

Fairerweise könnte man es auf 75 anheben, wenn man Fremdzitate in Kommentaren mitzählt. Aber wenn Raymond Chen treeview statt tree view schreibt, lasse ich das so, weil ich das Zitat sonst nie mehr googeln kann.

Ich lernte:
  • parantheses -> parentheses
  • Greenwhich -> Greenwich
  • re-entrancy -> reentrancy
  • resetted -> reset
Ich weiß es eigentlich besser, versemmelte aber trotzdem:
  • adressable -> addressable
  • boolean -> Boolean
  • childs -> children
  • generelly -> generally
  • occurance -> occurrence
  • provoce -> provoke
  • spacially -> spatially
  • whitespacing -> whitespace
Vertipper im Eifer des Gefechts:
  • unknwon
  • ignor
  • coverting
  • manuacturer
  • pretection
3/10; won’t activate more than once a year.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Alexander Kornrumpf
Moderator
Beiträge: 1993
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Krishty hat geschrieben: 19.01.2023, 23:39 Autokorrektur durch Snoop Dogg:
Bild
Ich war jetzt gerade kurz in einem Paralleuniversum in dem es ein KI-Tool zur statischen Code-Analyse gibt, das "Snoop Dogg" heißt. Wäre dann aber "Anti-Jammer-Thread" gewesen.
NytroX
Establishment
Beiträge: 278
Registriert: 03.10.2003, 12:47

Re: Jammer-Thread

Beitrag von NytroX »

Darum schalte ich das immer ab :-)
Aber noch besser ist das in IntelliJ. Da muss man Spellchecking an verschieden Stellen ausschalten. So 5 oder 6, die ich jedes mal suchen muss.
Und da gibt es keine globalen IDE Einstellungen, sondern man muss das für JEDES VERDAMMTE PROJEKT ALLES NEU MACHEN !!
Ich weiß einfach nicht was die Leute an den Düsen-Hirnies toll finden...
Alexander Kornrumpf
Moderator
Beiträge: 1993
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Mirror hat geschrieben: 17.01.2023, 11:50 Mir ist wieder mal eine Festplatte kaputt gegangen. Also habe ich eine Neue bestellt und sie ist heute gekommen. Leider ging diese beim ersten formatieren kaputt und wird jetzt nicht mehr erkannt. Ich weis nicht, aber gefühlt jede neue 3.Platte ist kaputt. Jedenfalls fühlt es sich so an.
Na gut, jetzt darf ich zur Post und muss auch noch den Rückversand bezahlen. Das ist ärgerlich.
Exakt das ist mir jetzt auch passiert.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2047
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Adobe ist ein richtiger Kackladen.

Ich habe ein Video in Premiere, dass ich zuletzt vor einem Jahr bearbeitet habe. Jetzt braucht es eine neue Version. Ich hab ein Jahr lang nichts angefasst und trotzdem ist jetzt alles kaputt. Natürlich hab ich keine Updates installiert (das hat Adobe getan, ohne es mir zu sagen), beim Starten kommt jetzt jedenfalls eine Meldung "You can now upgrade your legacy titles to Essential Graphics. Blabla bla, Yes, No?". Ich hab absolut keine Ahnung, was das legacy titles oder essential graphics sein sollen, es ist mir auch egal, ich will es nicht wissen. Ich will einfach nur an meinem Projekt weiterarbeiten. Und egal was ich anklicke, irgendwas passiert und die Schriftarten sind überall falsch.

Adobe hat scheinbar den digitales Komposthaufen erfunden. Alles was du machst, schimmelt vor sich hin wenn du nicht permanent Arbeit rein investierst. Was für ein Arschloch denkt sich so eine Scheiße aus? Die oberste Priorität ist, dass man scheiß System zu funktionieren hat. Wenn ich Updates brauche installiere ich mir die selber aber ich will verdammt nochmal nicht, dass Dinge einfach kaputt gehen wenn ich sie nichtmal anfasse.

Und hier geht es noch nichteinmal darum, dass Softwareabos verboten gehören, das sind ja quasi explizite Komposthaufen, weil man ständig bezahlen muss, damit man seine Dateien behalten kann. Nein, selbst wenn man bezahlt ist die Software noch so scheiße, dass trotzdem alles kaputt geht. Meine Fresse.
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ich arbeite an einer C-Codebase, die char standardmäßig als unsigned char behandelt. Hintergrund: C und C++ definieren nicht, ob char eigentlich signed oder unsigned ist – schlimmer noch, char ist ein dritter Typ und jeder Compiler kann sich quasi aussuchen, ob negative Zahlen erlaubt sind oder nicht.

Heute hat sich weitgehend durchgesetzt, char als signed zu behandeln, aber jeder Compiler hat Flags, das umzustellen. Meine Codebase hier erfordert unsigned. Ich möchte die Flags loswerden und mein Ziel ist portabler Code, indem unsigned und signed explizit angegeben werden, wenn Code darauf aufbaut. (Besser noch via int8_t und uint8_t, aber I digress.)

Ich schalte also das Flag aus, und die Menge an Laufzeitfehlern ist überwältigend.

Offensichtliche Fehler sind langweilig: Dateidaten als char lesen und zu int casten macht plötzlich negative Zahlen statt große. Klar.

Der hier war besser: Out-of-Bounds-Zugriff bei char red = palette[colorindex].red. colorindex ist als int deklariert und der Debugger zeigt 203. palette ist 256 Einträge groß. Huh?!

In C ist es erlaubt, globale Variablen mehrfach mit unterschiedlichen Typen zu deklarieren. Der Linker muss dann die größere Repräsentation wählen. Eine Quelldatei hat colorindex als char deklariert; eine andere als int und noch eine als unsigned char. Der Compiler hat die Zuweisungen von 1 B auf 4 B sign-extended, aber der Debugger kam nicht damit klar und zeigte Müll an. Tatsächlich griff der Code dann auf Element [-75] zu, was natürlich falsch war. Dieses Linker-Verhalten ist wohl borderline-legal, aber richtig heimtückisch (und für C++ abgeschafft worden). Ich musste alle Deklarationen der Variable finden und gleichziehen.

Dann liefen im Programm Dinge rückwärts ab statt vorwärts. Wtf?! Turns out: Es gab ein Flag isRunning. Benutzt wurde es als movement = speed * isRunning, weil es ja 1 ist, wenn alles laufen soll, und 0 wenn gestoppt.

Dummerweise war es deklariert als char isRunning : 1, also als einzelnes Bit in einem Bitfeld. Für vorzeichenbehaftete Typen sind die beiden Werte, die sich in einem Bit speichern lassen, aber nicht 0 und 1 (das wäre unsigned) – sondern 0 und -1! Darum lief jetzt alles rückwärts.

Ich weiß nicht, ob ich das hinkriegen werde. Wenn man eine große Codebase einmal mit Annahme über den Wertebereich von char geschrieben hat, ist das unglaublich schwer wieder zu ändern. Fuck. Mir bleibt wohl nichts anderes, als nach char zu greppen und jede Verwendung einzeln zu beurteilen :(
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
starcow
Establishment
Beiträge: 451
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub

Re: Jammer-Thread

Beitrag von starcow »

Interessant! Das int und signed int identisch sind (entsprechend auch short, long, long long) - jedoch char und signed char formal verschieden: davon hatte ich gelesen. Eindrücklich zu lesen, was das in der Praxis für Probleme mit sich bringen kann!
Krishty hat geschrieben: 23.01.2023, 19:27 ... Dummerweise war es deklariert als char isRunning : 1, also als einzelnes Bit in einem Bitfeld. Für vorzeichenbehaftete Typen sind die beiden Werte, die sich in einem Bit speichern lassen, aber nicht 0 und 1 (das wäre unsigned) – sondern 0 und -1! Darum lief jetzt alles rückwärts.
0 und -1? Wie denn das? Wird denn das MSB modifiziert? Dann wäre es ja -128 und 0, nein?

LG, starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
xq
Establishment
Beiträge: 1567
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

0 und -1? Wie denn das? Wird denn das MSB modifiziert? Dann wäre es ja -128 und 0, nein?
isRunning ist ja ein 1-bit signed integer, meist im Zweierkomplement. Das mapped ja die unsigned ints von 0 … (2^n)-1 um auf -(2^(n-1)) ... (2^(n-1)-1) (also bei 8 bit von 0...255 auf -128 bis 127).

Bei einem Bit hast du nur den Wertebereich 0...1, welcher dann auf -1...0 umgemapped wird, da das höchstwertigste Bit ja immer noch das sign-bit ist, muss also der Wert, der dabei raus kommt, negativ sein.

Ist etwas verwirrend, ergibt aber Sinn. Jemand anders kann das sicher auch besser erklären
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
dot
Establishment
Beiträge: 1699
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Krishty hat geschrieben: 23.01.2023, 19:27In C ist es erlaubt, globale Variablen mehrfach mit unterschiedlichen Typen zu deklarieren. Der Linker muss dann die größere Repräsentation wählen.
ka welche Version von C das sein soll, aber das hör ich zum ersten Mal. Generell gilt
ISO/IEC 9899:2023 6.2.7/2 hat geschrieben:All declarations that refer to the same object or function shall have compatible type; otherwise, the
behavior is undefined
.
Typen unterschiedlicher Größe sind schonmal fix nicht compatbile types…
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

dot hat geschrieben: 24.01.2023, 03:25ka welche Version von C das sein soll, aber das hör ich zum ersten Mal. Generell gilt
ISO/IEC 9899:2023 6.2.7/2 hat geschrieben:All declarations that refer to the same object or function shall have compatible type; otherwise, the
behavior is undefined
.
Typen unterschiedlicher Größe sind schonmal fix nicht compatbile types…
Microsoft so:
https://learn.microsoft.com/en-us/cpp/sanitizers/error-global-buffer-overflow hat geschrieben:Global variables in C are treated much differently than in C++. This difference is because of the complex rules for linking C.

In C, a global variable can be declared in several source files, and each definition can have different types. The compiler can't see all the possible definitions at once, but the linker can. For C, the linker defaults to selecting the largest-sized variable out of all the different declarations.

In C++, a global is allocated by the compiler. There can only be one definition, so the size of each definition is known at compile time.
Wo habe ich was missverstanden? Müssen vielleicht die Declarations gleich sein, aber die Definitions dürfen sich unterscheiden?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Matthias Gubisch
Establishment
Beiträge: 418
Registriert: 01.03.2009, 19:09

Re: Jammer-Thread

Beitrag von Matthias Gubisch »

Das ist eine interessante Diskussion und eigentlich schon fast einen eigenen Thread wert..
Der Jammer Thread hier ist echt eine Goldgrube, schade dass hier die Sachen dann so schwer wiederzufinden sind...
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Krishty hat geschrieben: 23.01.2023, 19:27Fuck. Mir bleibt wohl nichts anderes, als nach char zu greppen und jede Verwendung einzeln zu beurteilen :(
Genau das. Gegner bleiben stehen; Waffen feuern nicht; Multiplayer ist tot. Nichts funktioniert.

char kommt 12.000 Mal im Quelltext vor, und das kriege ich niemals persönlich geprüft. Ich habe versucht, alles pauschal durch uchar zu ersetzen und dann nur die Compiler-Fehlermeldungen (signed uchar etc.) abzuackern, aber selbst das ist einfach zu viel. Cs laxes Typsystem hilft gar nicht, weil es einfach ständig still castet.

Ich kann auch nicht Datei für Datei umstellen, denn die Deklarationen sind total über alle Dateien verteilt und #include zieht dauernd unverwandte Deklarationen mit char rein.

Ich schmeiß hin. Benutzt bitte bloß nie diese Compiler-Schalter! Wenn ihr Code mit char schreibt, der Arithmetik statt Textverarbeitung macht, nutzt bitte von vornherein uint8_t und int8_t, damit ihr nie in dieser Hölle landet.

Besonders tut mir weh, dass ein Viertel der chars für Boolesche Flags verwendet wird. Ich hätte 3.000 Probleme weniger, wenn C in den 90ern ein ordentliches bool eingeführt hätte.

Zeigt übrigens auch gut, warum C++ im C-Stil sehr viel besser ist als C: Strikte Typprüfung; bool; One Definition Rule. Damit sähe die Codebase direkt radikal anders aus.

Das führt mich zu einer anderen Idee: Alles C als C++ kompilieren. Dann kriege ich zumindest die faulen Casts usw. mit. Aus Gründen, die ich nicht verstehe, bekomme ich die weder mit /Za noch mit /std:c99 /permissive-, wobei letzteres komplett nutzlos ist.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Krishty hat geschrieben: 24.01.2023, 07:37
dot hat geschrieben: 24.01.2023, 03:25ka welche Version von C das sein soll, aber das hör ich zum ersten Mal. Generell gilt
ISO/IEC 9899:2023 6.2.7/2 hat geschrieben:All declarations that refer to the same object or function shall have compatible type; otherwise, the
behavior is undefined
.
Typen unterschiedlicher Größe sind schonmal fix nicht compatbile types…
Microsoft so:
https://learn.microsoft.com/en-us/cpp/sanitizers/error-global-buffer-overflow hat geschrieben:Global variables in C are treated much differently than in C++. This difference is because of the complex rules for linking C.

In C, a global variable can be declared in several source files, and each definition can have different types. The compiler can't see all the possible definitions at once, but the linker can. For C, the linker defaults to selecting the largest-sized variable out of all the different declarations.

In C++, a global is allocated by the compiler. There can only be one definition, so the size of each definition is known at compile time.
Wo habe ich was missverstanden? Müssen vielleicht die Declarations gleich sein, aber die Definitions dürfen sich unterscheiden?
Diese Antwort geht darauf ein: https://stackoverflow.com/questions/143 ... 87#1433387 (such nach COMMON)

Es ist wohl eine Erweiterung zwecks FORTRAN-Kompatibilität, durch die sowohl MSVC als auch GCC erlauben, Variablen unterschiedlich zu definieren und dann im Linker die größte Definition wählen. GCC hat das in den Standard-Optionen mittlerweile abgeschaltet; MSVC offensichtlich nicht.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1699
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Krishty hat geschrieben: 24.01.2023, 10:29
Krishty hat geschrieben: 24.01.2023, 07:37
Diese Antwort geht darauf ein: https://stackoverflow.com/questions/143 ... 87#1433387 (such nach COMMON)

Es ist wohl eine Erweiterung zwecks FORTRAN-Kompatibilität, durch die sowohl MSVC als auch GCC erlauben, Variablen unterschiedlich zu definieren und dann im Linker die größte Definition wählen. GCC hat das in den Standard-Optionen mittlerweile abgeschaltet; MSVC offensichtlich nicht.
lol. cursed²
Benutzeravatar
starcow
Establishment
Beiträge: 451
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub

Re: Jammer-Thread

Beitrag von starcow »

xq hat geschrieben: 24.01.2023, 00:11
0 und -1? Wie denn das? Wird denn das MSB modifiziert? Dann wäre es ja -128 und 0, nein?
isRunning ist ja ein 1-bit signed integer, meist im Zweierkomplement. Das mapped ja die unsigned ints von 0 … (2^n)-1 um auf -(2^(n-1)) ... (2^(n-1)-1) (also bei 8 bit von 0...255 auf -128 bis 127).

Bei einem Bit hast du nur den Wertebereich 0...1, welcher dann auf -1...0 umgemapped wird, da das höchstwertigste Bit ja immer noch das sign-bit ist, muss also der Wert, der dabei raus kommt, negativ sein.

Ist etwas verwirrend, ergibt aber Sinn. Jemand anders kann das sicher auch besser erklären
Das macht Sinn. Danke für die Erklärung!
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Krishty
Establishment
Beiträge: 7974
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Krishty hat geschrieben: 19.01.2023, 23:393/10; won’t activate more than once a year.
Vielleicht sollte ich doch nochmal Visual Studio Code probieren?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten