ToR
Guest
Sat Aug 12, 2006 10:36 pm
Witam!
Mam pytanie jak mozna inaczej zapisac "bit_is_set(bufor,Ktory)"? To dla mnie
bardzo wazne, a szukacjac w necie nie natknelem sie na rozwiazanie.
a wymyslone prze zemnie konstrukcje nie dzialaja...to znaczy:
1) bufor&(1<<Ktory);
2) bufor&(1<<Ktory)==Ktory; czy
3) bufor |= (~(1<<Ktory))&1;
Pozdrawiam,
Rafala k.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Marcin Stanisz
Guest
Sat Aug 12, 2006 11:07 pm
Dnia 13 Aug 2006 00:36:51 +0200, ToR napisał(a):
Quote:
Mam pytanie jak mozna inaczej zapisac "bit_is_set(bufor,Ktory)"? To dla mnie
bardzo wazne, a szukacjac w necie nie natknelem sie na rozwiazanie.
a wymyslone prze zemnie konstrukcje nie dzialaja...to znaczy:
1) bufor&(1<<Ktory);
2) bufor&(1<<Ktory)==Ktory; czy
3) bufor |= (~(1<<Ktory))&1;
1) jest OK. Może czegoś innego zapominasz (np. if

)?
Tak jest zresztą definiowane to makro:
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))
Pozdrawiam
Marcin Stanisz
--
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"
Elpix
Guest
Sat Aug 12, 2006 11:17 pm
Quote:
1) bufor&(1<<Ktory);
2) bufor&(1<<Ktory)==Ktory; czy
3) bufor |= (~(1<<Ktory))&1;
Wykorzystując "#define" zapisałbym to: "#define bit_is_set(bufor, ktory)
(bufor&(1<<ktory))".
Dodatkowe nawiasy dają Ci możliwość sprawdzenia stanu bitu na "NIE" bez
konieczności zastanawiania się nad błędami wywalanymi przez kompilator.
Ale ilu "programatorów" to pewnie tyle zdań :-)
Pozdrawiam.
Józek Swinio
Guest
Sat Aug 12, 2006 11:24 pm
Quote:
a wymyslone prze zemnie konstrukcje nie dzialaja...to znaczy:
1) bufor&(1<<Ktory);
2) bufor&(1<<Ktory)==Ktory; czy
3) bufor |= (~(1<<Ktory))&1;
A to?:
bufor |= 1<<n; // ustawia na (n+1) pozycji
bufor &= ~1<<n; // zeruje na (n+1) pozycji
pozdr.
swinio
Andy
Guest
Sat Aug 12, 2006 11:29 pm
Użytkownik "ToR" <ToR_kulaWYTNIJTO@o2.pl> napisał w wiadomości
news:3ea6.000000bd.44de5802@newsgate.onet.pl...
Quote:
Witam!
Mam pytanie jak mozna inaczej zapisac "bit_is_set(bufor,Ktory)"? To dla mnie
bardzo wazne, a szukacjac w necie nie natknelem sie na rozwiazanie.
a wymyslone prze zemnie konstrukcje nie dzialaja...to znaczy:
1) bufor&(1<<Ktory);
2) bufor&(1<<Ktory)==Ktory; czy
3) bufor |= (~(1<<Ktory))&1;
bit_is _set jest zdefiniowany tak:
#define bit_is_set(sfr, bit) (sfr & _BV(bit))
natomiast _BV:
#define _BV(bit) (1 << (bit))
czyli ponizsza konstrukcja jest poprawna
bufor&(1<<Ktory)
znaczy:
if( bufor & (1<<Ktory) ) {
}
wydaje sie rownowazne:
if( bit_is_set( bufor, Ktory) ) {
}
Pokaz moze dokladnie w jakim kontekscie chcesz tego uzyc.
--
Andrzej
Guest
Sun Aug 13, 2006 9:42 am
Quote:
1) jest OK. Może czegoś innego zapominasz (np. if

)?
Wielkie dzieki wszytkim za pomoc! ;)
Okazalo sie ze jak podejrzewaliscie wszytko mialem dobrze z sama definicja
dzialania ale myslalem ze ono cos zwraca i wczesniej mialem taka konstrukcje:
if(bufor&(1<<Ktory) == 1) return 1;
a dzieki waszym podpowiedzia zmienilem na
if(bufor&(1<<Ktory)) return 1;
i dziala dobrze

!!!
pozdarwiam,
Rafal k.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
mw158979
Guest
Sun Aug 13, 2006 11:40 am
<ToR_kulaWYTNIJTO@o2.pl> schrieb
Quote:
Okazalo sie ze jak podejrzewaliscie wszytko mialem dobrze z sama definicja
dzialania ale myslalem ze ono cos zwraca i wczesniej mialem taka
konstrukcje:
if(bufor&(1<<Ktory) == 1) return 1;
No bo zwraca, ale nie 0 lub 1 tylko
binarna koniunkcje czyli 0 lub 1<<Ktory.
Przy okazji zerknalem na wykaz priorytetow
i wychodzi, ze == jest silniejsze niz &.
Zatem najblizsze poprawne bedzie takie:
if ( (bufor&1<<Ktory) != 0) return 1;
hej