Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Programowanie w C#

18.08.2015 11:42
Didier z Rivii
1
Didier z Rivii
238
life 4 sound

Programowanie w C#

Odkurzam ostatnio trochę moje skromne umiejętności programistyczne i wziąłem się za C#.
Zacząłem pisać prosty programik, w biegu którego przychodzi moment, że muszę użyć maski bitowej na liczbie long (64bit).
Czy jest na to jakiś prosty sposób? bo wg tego co znalazłem w sieci to nie powinno być z tym problemu natomiast mi Visual Studio pokazuje następujące błędy:
- podczas próby użycia operatora & - Cannot implicitly convert type 'long' to 'bool'
- podczas próby użycia operatora & - Operator '&&' cannot be applied to operands of type 'long' and 'int'

I jeszcze chciałbym prosić o polecenie jakiegoś forum na temat nauki programowania/pomocy dla świeżaków. Generalnie widziałem, że for tego typu jest wiele, ale może ktoś jest w stanie polecić jakieś, na którym jest przyzwoity ruch i ilość tematów.

18.08.2015 12:16
2
odpowiedz
JonsonJonson
101
Generał

Wklej kod i pokaż cały warunek

18.08.2015 12:35
Didier z Rivii
3
odpowiedz
Didier z Rivii
238
life 4 sound

Różne wersje "prawej strony" warunku próbowałem, ale nie udało mi się znaleźć poprawnej. Pewnie robię jakiś banalny błąd.
kodbledu jest zmienna typu long

np.

if (kodbledu && 0x1)

Console.WriteLine("test");

albo

if (kodbledu && 1)

Console.WriteLine("test");

18.08.2015 13:02
4
odpowiedz
MOD
182
Generał

Użycie operatora logicznego && w taki sposób nie ma sensu, bo prawa strona wyrażenia zawsze jest prawdziwa.
Jeśli chcesz sprawdzić czy pierwszy bit kodu błędu jest ustawiony to spróbuj tego
if ((kodbledu&1)==1)

Console.WriteLine("test")

18.08.2015 13:10
MiniWm
😈
5
odpowiedz
MiniWm
231
PeaceMaker

The conditional-AND operator (&&) performs a logical-AND of its bool operands, but only evaluates its second operand if necessary.

18.08.2015 13:12
Didier z Rivii
6
odpowiedz
Didier z Rivii
238
life 4 sound

OK dzięki :) Tak myślałem, że to coś banalnego, a ciężko mi było załapać, bo w specjalistycznym oprogramowaniu, w jakim pracuje na co dzień warunki pisze się właśnie w taki sposób jak podałem w [4], więc ewidentnie zgubiło mnie przyzwyczajenie ;)

18.08.2015 13:47
Didier z Rivii
7
odpowiedz
Didier z Rivii
238
life 4 sound

Chyba jeszcze nie do końca kumam, albo moje przyzwyczajenia są za mocne.
Mam kod jak poniżej:

if ((kodbledu & 0x1) == 1)

Console.WriteLine("test1");

if ((kodbledu & 0x2) == 1)

Console.WriteLine("test2");

czemu, gdy kodbledu, jest rowny 3, to żaden z tych warunków nie zachodzi? Zgodnie z moimi przyzwyczajeniami, powinny w takim przypadku zajść oba warunki, więc w którym miejscu robię błąd?

18.08.2015 14:04
8
odpowiedz
MOD
182
Generał

Sprawdziłem ten kod dla pewności ale tylko w C(akurat pod ręką ma tylko kompilator C/C++).
Gdy kodbledu jest równe 3 pierwszy warunek zachodzi a drugi nie.
Drugi nie zachodzi bo 3&0x2=0x2 (bitowo: 11&10=10) a nie 1

18.08.2015 14:33
Didier z Rivii
9
odpowiedz
Didier z Rivii
238
life 4 sound

Ok masz oczywiście rację z tym drugim warunkiem.
Czyli generalnie sprawa z maskami bitowymi sprawdzającymi występowanie bitu na danym miejscu w longu nie będzie taka szybka jak pierwotnie myślałem.

EDIT:
Jednak udało się to szybko obejść sprawdzaniem nierówności. Ech muszę odświeżyć sobie programowanie nie ma co ;)

Forum: Programowanie w C#