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.
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");
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")
The conditional-AND operator (&&) performs a logical-AND of its bool operands, but only evaluates its second operand if necessary.
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 ;)
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?
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
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 ;)