Bitoperator ~
-
Hallo, meine Frage bezieht sich auf den Bitoperator ~ (Tilde). Ich habe z.b. die Zahl 120 welche der binären Zahl 1111000 entspricht. Wenn ich den Negationsoperator (also NOT) darauf anwende, dann werden doch alle Bits einfach invertiert, oder? Ich erhalte also demnach 0000111, was dezimal 7 entspricht. Wenn ich das aber im Visual C++ 6 ausprobiere, lautet das Endergebniss -121, warum, was mache ich falsch?
-
ist es ein int? Dann sieht das Ergebnis so aus:
11111111111111111111111110000111Vorausgesetzt ein int ist 32-Bit groß: es werden alle Bits inventiert, nich nur die ersten sieben.
-
Hallo,
du machst nichts falsch.Dass du die Zahl -121 erhälst, hängt mit der Art zusammen, wie vorzeichenbehaftete Werte gespeichert werden.
Die Methode nennt sich two's complement. (falls es dich genauer interessiert, google mal danach)
Dabei erhält man den Bitcode der negativen Zahlen, indem die Bits der entsprechenden positvie Zahl invertiert werden und dann eins dazuaddiert wird.Da du nur die Bits invertierst, erhälst du demnach die entsprechende negative Zahl - 1, also -121.
Probiers mal mit unsigned char.
-
Ja, ich habe es als int deklariert, nur stimmt doch deine Version dann auch nicht, denn dann würde ja eine viel größere Zahl rauskommen, VC 6 sagt aber -121. Das wundert mich wie es darauf kommt.
EDIT: Post bezieht sich auf die erste Antwort!
-
das liegt daran, dass ein 32-Bit int Werte zwischen 2147483647 und -2147483648 enthalten kann. ~120 oder 4294967175 als unsigned Wert, übersteigt diese Grenze. Siehe auch std::numeric_limits.
PS. definiert, nicht deklariert.
-
Deklariert ist aber nicht falsch, das hat er mit der Definition nämlich auch direkt getan.
-
darum sagt man, dass eine Variable definiert wird. Deklaration ist eine Bekanntmachung, dass eine Variable oder ein Klassen-Typ irgendwo definiert wird.
-
Es ist lediglich genauer.
-
C14 schrieb:
Hallo,
du machst nichts falsch.Die Methode nennt sich two's complement. (falls es dich genauer interessiert, google mal danach)
Das nennt sich Zweierkomplement. Denkst du auch nach, nachdem du etwas irgendwo gelesen hast und bevor du hier etwas schreibst? Die verbehaltlose Übernahme englischer Begriffe macht keinen guten Eindruck.
-
und was ist mit
void foo () { extern int i; i = ~i; }
-
Ruhollah schrieb:
C14 schrieb:
Hallo,
du machst nichts falsch.Die Methode nennt sich two's complement. (falls es dich genauer interessiert, google mal danach)
Das nennt sich Zweierkomplement. Denkst du auch nach, nachdem du etwas irgendwo gelesen hast und bevor du hier etwas schreibst? Die verbehaltlose Übernahme englischer Begriffe macht keinen guten Eindruck.
-
Ruhollah schrieb:
C14 schrieb:
Hallo,
du machst nichts falsch.Die Methode nennt sich two's complement. (falls es dich genauer interessiert, google mal danach)
Das nennt sich Zweierkomplement. Denkst du auch nach, nachdem du etwas irgendwo gelesen hast und bevor du hier etwas schreibst? Die verbehaltlose Übernahme englischer Begriffe macht keinen guten Eindruck.
Vielen Dank für diesen qualifizierten Beitrag zur Diskussion...
Es tut mir leid, wenn ich mit dem Gebrauch dieses englischen Wortes die allgemein übliche deutsche Benennung in der Informatik missachtet habe.
Ich werde versuchen, mich zu bessern.
-
C14 schrieb:
Es tut mir leid, wenn ich mit dem Gebrauch dieses englischen Wortes die allgemein übliche deutsche Benennung in der Informatik missachtet habe.
Muss dir nicht leid tun. Wenn du es unter dem englischen Namen kennst, dann sag es englisch - das ist besser als wenn du es vielleicht falsch ins Deutsche übersetzt. Ausserdem sollten englische Begriffe in einem Programmierer Forum nun wirklich keine Hürde darstellen...
-
Shade Of Mine schrieb:
C14 schrieb:
Es tut mir leid, wenn ich mit dem Gebrauch dieses englischen Wortes die allgemein übliche deutsche Benennung in der Informatik missachtet habe.
Muss dir nicht leid tun. Wenn du es unter dem englischen Namen kennst, dann sag es englisch - das ist besser als wenn du es vielleicht falsch ins Deutsche übersetzt. Ausserdem sollten englische Begriffe in einem Programmierer Forum nun wirklich keine Hürde darstellen...
Es geht nicht darum, ob englische Begriffe in diesem Forum eine Hürde sind oder nicht. Es geht um Respekt vor der eigenen Muttersprache und Kultur.Und nur so ein Tipp am Rande: Egal ob man das englische Wort verständlich ist oder nicht, und unabhängig davon, in welcher Gesellschaft man sich befindet, kommen die deutschen Begriffe, wenn es sie denn gibt (und sehr häufig gibt es sie) wesentlich besser an. Englisch Mode- und Lehnwörter eingebettet in einem deutschen Satz wirken plakativ, albern, unseriös und aufgesetzt. Oder redet jemand von euch noch von Computern? Ich sage Rechner.
-
Ruhollah schrieb:
Es geht nicht darum, ob englische Begriffe in diesem Forum eine Hürde sind oder nicht. Es geht um Respekt vor der eigenen Muttersprache und Kultur.
OK, ich habe gerade in meinem Durchsucher eine Verknüpfung zu dieser Netz-Seite zu den Lesezeichen hinzugefügt.
Ist doch n Blödsinn: es ist ein Browser, es sind Bookmarks und Links und Webseiten.
Man kann nicht alles eindeutschen, oder redest du auch von Binder statt Linker und Zusammenfüger statt Assembler?
Und nur so ein Tipp am Rande: Egal ob man das englische Wort verständlich ist oder nicht, und unabhängig davon, in welcher Gesellschaft man sich befindet, kommen die deutschen Begriffe, wenn es sie denn gibt (und sehr häufig gibt es sie) wesentlich besser an.
Ich verwende lieber einen englischen Begriff als irgendwie zu versuchen ihn zu übersetzen.
zB weiss ich nicht, ob ich zu einem Assembler Zusammenfüger sagen kann. Da verwende ich lieber den englischen Begriff und bin auf der sicheren Seite. Da den jeder verstehen kann - notfalls über google.
Englisch Mode- und Lehnwörter eingebettet in einem deutschen Satz wirken plakativ, albern, unseriös und aufgesetzt. Oder redet jemand von euch noch von Computern? Ich sage Rechner.
Ja, ich rede von Computern. Ich rede von OpenSource, ich rede von Compilern, Browsern, Linkern, Assemblern, Bookmarks, DLLs, Shared Objects, Libraries. Ich habe einen Sat-Receivier daheim (und ich weiss nichtmal wie es auf deutsch heisst). Ich rede von Laptops und Notebooks. Ich habe ein Desktop-Hintergrundbild und meine PCs hängen über ein LAN an einem Router der über ein ADSL Modem mit meinem Provider verbunden ist wo Domain Name Server die Host Adressen auf IPs umbiegen. Meine Webseite habe ich bei einem Hoster der mir Webspace anbietet.
Wenn mich jemand fragt was
template<class T>
bedeutet, dann erkläre ich ihm was Templates sind und rede nicht von Vorlagen.
Ich verwende VCS um meinen Code zu verwalten.
int ist für mich ein builtin. ABC ist für mich gängig, ABK (Abstrakte Basisklasse) habe ich dagegen noch nie gesehen. Ich rede oft von pointern und buffern statt Zeigern und Puffern. Ich rede von streams und nicht von Strömen. Ich schaue im Fernsehen auch gerne Sitcoms und mag Stand-Up-Comedy.
Weiters chatte ich im IRC mit hilfe eines IRCClients. Wenn ich mich dort mit jemanden privat unterhalte, dann mache ich es im Query. Jeder channel hat dort auch ein Topic. Und wer das nicht versteht, den verweise ich auf FAQ. Ich lese mithilfe meines Mail-Clients Emails und Newsgroups. Ich bekomme auch ein paar Newsletter, allerdings auch viel Junkmails. Doch zum Glück wird Spam bei mir gefiltert.
Was ist daran unverständlich?
Es würde mich enorm viel Zeit kosten diese Begriffe alle zu übersetzen, und dann würden mich die meisten wahrscheinlich garnicht verstehen. Da nehm ich lieber die englischen Worte und allen ist klar was ich meine (oder sie können danach googlen (btw: ich google und ich dursuche nicht das Internetz (oder wie immer Internet auf deutsch heisst)).Fazit: wenn mir jemand etwas erklärt und er kennt nur das englische Wort dafür - dann her damit. Ich kann danach googlen wenn ich es nicht verstehe. Wenn jemand beide Wörter kennt, dann bitte das gängigiere.
Denn ich wüsste nicht, was ich machen soll, wenn jemand von einem Wurzelverzeichnis und dem Heimatverzeichnis, von symbolischen Verknüpfungen mit Kommandolein Skripten und Start-Ladern spricht (wenn er in wirklichkeit das root Directory, home Directory, symbol links, shell scripten und boot loadern spricht).
-
Hi!
Mich nervt diese "Amerikanisierung" auch, allerdings nur dann wenn jemand einen Satz wiedergeben will indem die eine hälfte Englisch und die andere Hälfte Deutsch ist. Bei Begriffen, wodurch eigentlich kein englischer Satz entsteht, sehe ich kein Problem. Beim Programmieren bzw. Informatikern allgemein sind halt sehr viele Begriffe englisch und sind auch im Deutschen üblich, wie z.B. Templates oder Arrays (statt Felder).
Code-Hacker