Forum: PC-Programmierung C# - Bit löschen


von Harry L. (Gast)


Lesenswert?

Moin Moin,

wieso meckert der Compiler?
1
            uint value = 0b00000001;
2
            value &= ~(1 << 0);

Er sagt -> "Der Konstantwert "-2" kann nicht in "uint" umgewandelt 
werden.

Wie umgehe ich das? Casting?

von Dirk K. (merciless)


Lesenswert?

1
uint value = 0b00000001;
2
uint mask = 1 << 0;
3
value &= ~mask;

merciless

von Tek (Gast)


Lesenswert?

oder so:
1
uint value = 0b00000001;
2
value &= ~(1u << 0);

von Harry L (Gast)


Lesenswert?

Der Compiler beschwert sich immer noch bzgl. des Syntax.

Beitrag #5762407 wurde vom Autor gelöscht.
von Dirk K. (merciless)


Angehängte Dateien:

Lesenswert?

???

merciless

von c-hater (Gast)


Lesenswert?

Dirk K. schrieb:

> ???

Wo ist dein Problem? Das ist doch genau das zu erwartende Ergebnis. Wenn 
nur Bit0 gesetzt war, wird nach dem Löschen von Bit0 wohl was 
herauskommen?

von rauten-c-hater (Gast)


Lesenswert?

Harry L. schrieb:
> Wie umgehe ich das?

Vernünftige Programmiersprache benutzen?

von Dirk K. (merciless)


Lesenswert?

c-hater schrieb:
> Dirk K. schrieb:
>
>> ???
>
> Wo ist dein Problem? Das ist doch genau das zu erwartende Ergebnis. Wenn
> nur Bit0 gesetzt war, wird nach dem Löschen von Bit0 wohl was
> herauskommen?

Häh? Das "???" bezog sich auf die Aussage, der
Compiler würde das nicht akzeptieren. Mein
Screenshot zeigt aber, dass dem nicht so ist.
Geh woanders trollen.

merciless

von Tek (Gast)


Lesenswert?

Harry L schrieb:
> Der Compiler beschwert sich immer noch bzgl. des Syntax.

Also bei mir gehen auch beide Varianten.

von c-hater (Gast)


Lesenswert?

Dirk K. schrieb:

> Häh? Das "???" bezog sich auf die Aussage, der
> Compiler würde das nicht akzeptieren.

Und woher, bitteschön, sollte man wissen, dass sich das darauf bezog?

> Geh woanders trollen.

Lerne erstmal so zu zitieren, dass man weiss, worauf sich deine 
Statements beziehen, bevor du es wagen kannst, mit den Erwachsenen zu 
diskutieren.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

c-hater schrieb:
> Und woher, bitteschön, sollte man wissen, dass sich das darauf bezog?

Aus der Kombination des Screenshots und des Textes. Im Kontext des 
Threads ist das jetzt echt nicht besonders kompliziert zu erkennen, 
zumal im Posting unmittelbar vor dem Posting mit dem Screenshot das 
hier steht:

> Der Compiler beschwert sich immer noch bzgl. des Syntax.


Mir scheint, nicht Dirk hat ein Problem, sondern Du:

> bevor du es wagen kannst, mit den Erwachsenen zu diskutieren.

Noch mehr Dinge, von denen Du keine Ahnung hast.

von c-hater (Gast)


Lesenswert?

Rufus Τ. F. schrieb:

> Aus der Kombination des Screenshots und des Textes.

Ach? Der Sreenshot zeigt: alles ist OK und wie es sein sollte und der 
Text sagt: "???". Wie soll man daraus erkennen, dass ich das "???" auf 
etwas ganz anderes bezieht?

> Im Kontext des
> Threads ist das jetzt echt nicht besonders kompliziert zu erkennen

Das wäre wohl so, wenn es in diesem Forum statt der 
TeleTubbi-Linear-Listen echte Thread-Darstellungen gäbe, also Bäume. 
Dann (und nur dann) könnte man sowas notfalls tatsächlich allein dem 
Thread-Kontext ermitteln (aber auch dann wäre ein korrektes Zitat immer 
noch durchaus wünschenswert und hilfreich).

Diese, überaus sinnvolle und seit 40 Jahren bewährte Baumstruktur (z.B. 
von Anfang an Standard im UseNet) ist aber leider bekanntermaßen hier 
immer noch nicht verfügbar. Wohl mit Rücksicht auf die Dummies, denen 
sowas "kompliziertes" wie ein Baum nicht zugemutet werden kann, weil 
schon diese primitive Struktur ihre intellektuellen Fähigkeiten weit 
überfordert...

Ja, OK, in Oma Gertrudes Häkelforum hätte ich dafür vielleicht sogar 
noch Verständnis. Aber nicht in einem µC-Forum...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das stinkt nach Ausrede.

von c-hater (Gast)


Lesenswert?

Rufus Τ. F. schrieb:

> Das stinkt nach Ausrede.

OK, dann bitte mal "Butter bei die Fische". Woran genau hätte ich 
erkennen müssen, dass das "???" sich

1) überhaupt auf ein anderes Posting bezog

und

2) auf welches genau

Mach' mich schlau, Grosser Meister...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Scroll drei Zentimeter nach oben, wenn Du den Screenshot siehst.

Daß dieses Forum überwiegend sequentiell funktioniert, könntest auch Du 
in den vergangenen Jahren mitbekommen haben; hast es ja immerhin gerade 
geschafft, einen Rant darüber abzulassen.

Und zwischen den beiden Beiträgen ist auch genug Zeit verstrichen, daß 
klar ist, daß vor dem Posten des Beitrags mit dem Screenshot auch der 
Beitrag unmittebar davor gesehen wurde.

Beitrag "Re: C# - Bit löschen"

Beitrag "Re: C# - Bit löschen"

(Der Beitrag dazwischen wurde von Dirk selbst gelöschter, warum auch 
immer)

von c-hater (Gast)


Lesenswert?

Rufus Τ. F. schrieb:

> Scroll drei Zentimeter nach oben, wenn Du den Screenshot siehst.
>
> Daß dieses Forum überwiegend sequentiell funktioniert, könntest auch Du
> in den vergangenen Jahren mitbekommen haben; hast es ja immerhin gerade
> geschafft, einen Rant darüber abzulassen.
>
> Und zwischen den beiden Beiträgen ist auch genug Zeit verstrichen, daß
> klar ist, daß vor dem Posten des Beitrags mit dem Screenshot auch der
> Beitrag unmittebar davor gesehen wurde.
>
> Beitrag "Re: C# - Bit löschen"
>
> Beitrag "Re: C# - Bit löschen"
>
> (Der Beitrag dazwischen wurde von Dirk selbst gelöschter, warum auch
> immer)

Du salbaderst offensichtlich rum. Es gibt definitiv keine Information, 
aus der ich den Bezug hätte entnehmen können. Allenfalls hätte ich ihn 
mit hohem Aufwand und einem gewissen Mass an Heuristik erahnen können. 
Das ist im Kern, was du da ausdrückst.

Kommt dir das nicht selber etwas erbärmlich vor? Insondere angesichts 
dessen, was vor fast einem halben Jahrhundert im Usenet schon absolut 
kein Problem war?

von nicht“Gast“ (Gast)


Lesenswert?

c-hater schrieb:
> Du salbaderst offensichtlich rum. Es gibt definitiv keine Information,
> aus der ich den Bezug hätte entnehmen können. Allenfalls hätte ich ihn
> mit hohem Aufwand und einem gewissen Mass an Heuristik erahnen können.
> Das ist im Kern, was du da ausdrückst.

Tut mir leid für dich. Irgend wie hat das jeder hier hinbekommen außer 
dir. Vielleicht liegst du in diesem Fall einfach falsch.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

c-hater schrieb:
> Insondere angesichts dessen, was vor fast einem halben Jahrhundert im
> Usenet schon absolut kein Problem war?

Nach Deinem Auftreten in diesem Forum gerade in letzter Zeit würde ich 
klar sagen:

Dich braucht dieses Forum nicht. Such' Dir doch 'ne andere Trollwiese, 
wo Du herumpöbeln kannst.

von Dirk K. (merciless)


Lesenswert?

Rufus Τ. F. schrieb:
> (Der Beitrag dazwischen wurde von Dirk selbst gelöschter, warum auch
> immer)
So, dann kläre ich das hier mal auf:
Ursprünglich sah mein Post so aus:
1
Harry L schrieb im Beitrag #5762385:
2
> Der Compiler beschwert sich immer noch bzgl. des Syntax.
3
4
???
5
6
merciless
mit Anhang. Leider war der Screenshot nicht ganz
eindeutig. Deswegen habe ich einen 2. gemacht.
Ich hab einfach meinen Post gelöscht und wollte
den nochmal genauso anlegen. Gesagt getan, Anhang
dran und das Posten hat nicht funktioniert. Reload
der Seite etc. - nichts. Also habe ich das Zitat
weggelassen und gepostet, das ging.

Für einen Mitteleuropäer, der halbwegs geistig normal
entwickelt ist, sollte sich der Sinn der 3 Fragezeichen
auch aus dem Kontext ergeben.

Aber der Herr, der lieber Pascal programmiert,
hat wohl gedacht in diesem Thread ist fein trollen
möglich. Ich habe bei meinem ersten Post schon
geprüft, ob der Compiler das frisst. Und über 20 Jahre
Programmiererfahrung haben auch Grundkenntnisse in
den Bitoperatoren bei mir hinterlassen. Ich verbessere
doch keinen Code, den ich nicht verstanden habe!

merciless

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Dirk K. schrieb:
> Deswegen habe ich einen 2. gemacht.
> Ich hab einfach meinen Post gelöscht und wollte
> den nochmal genauso anlegen. Gesagt getan, Anhang
> dran und das Posten hat nicht funktioniert.

Die Forumssoftware verweigert das mehrmalige Posten ein- und desselben 
Textes, um so Spammern einen Riegel vorzuschieben. Leider nützt das 
vorherige Löschen des Originalbeitrags nichts, denn es hätte ja genauso 
von einem Moderator vorher als Spam erkannt werden und von ihm gelöscht 
werden können. Okay, man könnte zwar diese beiden Fälle unterscheiden, 
aber das ist nicht Thema dieses Threads.

> Für einen Mitteleuropäer, der halbwegs geistig normal
> entwickelt ist, sollte sich der Sinn der 3 Fragezeichen
> auch aus dem Kontext ergeben.

Ich habe ohne das Zitat - zugegebenermaßen - ca. eine Sekunde mehr 
gebraucht, um den Kontext zu verstehen. War also schon etwas schwieriger 
;-)

von Arno (Gast)


Lesenswert?

Frank M. schrieb:
> Dirk K. schrieb:
>> Für einen Mitteleuropäer, der halbwegs geistig normal
>> entwickelt ist, sollte sich der Sinn der 3 Fragezeichen
>> auch aus dem Kontext ergeben.
>
> Ich habe ohne das Zitat - zugegebenermaßen - ca. eine Sekunde mehr
> gebraucht, um den Kontext zu verstehen. War also schon etwas schwieriger
> ;-)

Böse Zungen würden jetzt behaupten, dass Lesekompetenz nun mal sehr 
ungleich verteilt ist. Was für dich eine Sekunde dauert, dauert bei 
(mindestens einem) anderen Tage, Wochen oder klappt nie.

Aber vielen Dank für die Erläuterung (die ich aus dem Zitat gelöscht 
habe).

MfG, Arno

von Paul H. (powl)


Lesenswert?

Dieses Forum ist einfach der Hammer. 5 Beiträge unter einem komplett 
sachlichen Thread und es eskaliert schon wieder. :-D Grandios.

von fop (Gast)


Lesenswert?

1
            uint value = 0x01;
2
            value &= ~(uint)(1 << 0);

Harry L. schrieb:
> wieso meckert der Compiler?
Weil (1 << 0) vom Typ int ist, wenn Du das invertierst, setzt Du das Bit 
für negatives Vorzeichen und der dadurch entstandene Wert (-2) passt 
nicht in einen uint.
> Wie umgehe ich das? Casting?
genau, das bereits gezeigte
1
            uint value = 0x01;
2
            value &= ~(1u << 0);
ist die Kurzform des Castings. Die 1 wird als unsigned gekennzeichnet, 
damit bleibt es auch nach dem Schieben ein uint.

PS : Mein Wuschel Studio mag keine Binärzahlen mit dem Präfix 0b 
annehmen. Willkommen zurück aus der Microchip Welt...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

fop schrieb:
> Mein Wuschel Studio mag keine Binärzahlen mit dem Präfix 0b annehmen.

Damit hat es auch recht; das 0b-Präfix ist kein Bestandteil 
irgendeiner C- oder C++-Spezifikation, sondern eine nichtportable 
Erweiterung.

Man sollte darauf verzichten.

von Tek (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Damit hat es auch recht; das 0b-Präfix ist kein Bestandteil
> irgendeiner C- oder C++-Spezifikation, sondern eine nichtportable
> Erweiterung.

In C# ist es wohl seit Version 7.0 möglich Binär Literale zu benutzen:
https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/uint

von MeierKurt (Gast)


Lesenswert?

c-hater schrieb:
> Rufus Τ. F. schrieb:
>
>> Das stinkt nach Ausrede.
>
> OK, dann bitte mal "Butter bei die Fische". Woran genau hätte ich
> erkennen müssen, dass das "???" sich
>
Andere (sogar ich, beim flüchtigen drüberlesen) habens verstanden.
Das dürfte doch genügen. Noch besser: Es bemühen sich doch einige, dir 
das zu erklären. Und du kommst stattdessen mit Bäumen aus dem letzten 
Jahrhundert.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tek schrieb:
> In C# ist es wohl seit Version 7.0 möglich

Nun könnte "fop" eine der zahlreichen anderen Programmiersprachen 
verwendet haben, die man mit Visual Studio nutzen kann - C, echtes C++, 
MS-pervertiertes C++ (C++/CLI, "Managed C++" etc.) oder irgendeine 
andere .Net-Sprache.

Leider schreiben die wenigsten, die sich auf Visual Studio beziehen, 
welche Programmiersprache sie tatsächlich einsetzen (oder verwechseln, 
falls sie es doch tun, gerne echtes C++ mit den MS-pervertierten 
Varianten).

Beitrag #5768146 wurde vom Autor gelöscht.
von fop (Gast)


Lesenswert?

C# in VS Express 2013

Wie man jetzt die Jahreszahl in eine Zahl kleiner als 7 umrechnet weiß 
ich gerade nicht.

Als Zielframework war zufällig .NET 4.5 ausgewählt.

von Dirk K. (merciless)


Lesenswert?

fop schrieb:
> C# in VS Express 2013
>
> Wie man jetzt die Jahreszahl in eine Zahl kleiner als 7 umrechnet weiß
> ich gerade nicht.
>
> Als Zielframework war zufällig .NET 4.5 ausgewählt.
Ich hab hier VS 2017, das entspricht V15.x
V7 müsste im letzten Jahrtausend gewesen sein ;)
(Menü Hilfe -> Info über VS)

merciless

von Tek (Gast)


Lesenswert?

VS2013 Wurde mit C# 5.0 ausgeliefert, 15.X ist nur die Versionsnummer 
vom Visual Studio.

Die 5.0 bzw 7.0 bezieht sich auf die Sprachspezifikation.

https://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29#Versions

von c-hater (Gast)


Lesenswert?

Rufus Τ. F. schrieb:

> Damit hat es auch recht; das 0b-Präfix ist kein Bestandteil
> irgendeiner C- oder C++-Spezifikation, sondern eine nichtportable
> Erweiterung.
>
> Man sollte darauf verzichten.

Ganz genau. Auf C/C++.

Eine Sprache, die standardmäßig nichtmal eine adäquate 
Literaldarstellung für die Grundlage der der ganzen digitalen Rechnerei, 
nämlich Binärzahlen bietet, ist ein Witz. Ein schlechter.

Allein die bloße Existenz dieser "nichtportablen" (ich glaub' mir läuft 
ein Ei aus) Erweiterung in vielen einschlägigen Compilern zeigt doch nur 
eins: Der Sprach-Standard taugt nix, wenn fast alle relevanten Compiler 
sich genötigt sehen, so eine Erweiterung zu implementieren...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

c-hater schrieb:
> Eine Sprache, die standardmäßig nichtmal eine adäquate
> Literaldarstellung für die Grundlage der der ganzen digitalen Rechnerei,
> nämlich Binärzahlen bietet, ist ein Witz.

Nö. C/C++ sind keine Lehrsprachen für Programmieranfänger.

Aber darum geht es in diesem Thread überhaupt nicht.

> zeigt doch nur eins:

Du hast keine Ahnung, aber davon sehr, sehr viel.

Wie wäre es, wenn Du Dich fortan nur noch in Threads zu Wort meldest, 
in denen es um die 68k-Assemblerprogrammierung geht? Denn von der gibst 
Du ja vor, Ahnung zu haben.

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