mozesz mi tylko wytlumaczyc jak dziala ta petla while a raczej to w niej bo jakos nie moge tego rozszyfrowac :] Moze w ten sposob bedzie bardziej czytelne: while(rozmiar >= (1 << i)){++i;} (1 << i) to po prostu przesuniecie bitowe (przesuniecie "1" o i bitow w prawo). Aby wiedziec, ile bitow wystarczy do zapisania...
for - pętla, tak jak napisałeś bit= (buf>>j)&1; Operacje bitowe: ">>" przesuniecie w prawo,"&" operacja AND-owania. Poczytaj o operatorach w c i będziesz wiedzial
operacje mnozenia i dzielenia dumnie opisane jako przesuniecie bitowe lepiej zrealizowac jako przesuniecie bitowe ;) polecenie Shift, szczegóły w helpie... inne propozycje jak bede mial wiecej czasu ;) Pozdrawiam
jak sie nie myle to jest przesuniecie bitow w lewo w pierwszym przypadku o jedna pozycje w drugim o dwie
Cześć, mam przykładową tablicę znaków: [syntax=c] char tab[6] = {'1', '2', '3', '4', '5', '6'}; std::cout << tab[0] << std::endl; // wyswietla 1 [/syntax] czy można na takiej tablicy zastosować operacje przesunięcia bitowego? Jeśli tak, to w jaki sposób to zrobić? Chciałbym, żeby pierwszym elementem tablicy po zastosowaniu przesunięcia bitowego...
Hunterhouse ten sposób z liczeniem liczby modulo jest genialy :) Sam na to wpadles?? Na koncu jest jeszcze obliczany pierwiastek,tez to jest dosc czasochlonne dla procka , zastanawiam sie czy na niego nie ma podobnego sposobu :) Czyli beta przyjmuje wartosci od 0- 31, i zmienia sie w zaleznosci od k ,ale caly czas w zakresie 0-31 . Jak dokladnie obliczone...
jak zadajesz takie pytanie, to zawsze podaj: -jaki procesor -ile ew. masz miejsca w pamieci (na tablice itd.) -raczej podawaj dokladnie problemy, bo to jest dosyc ogolne... -jaka ma byc dokladnosc tego jest cos takiego jak fixedpoint math - to taka matematyka na liczbach ulamkowych z uzyciem liczb calkowitych. Polega to na tym, ze zamiast...
chyba w AVRach w takim razie w adresie ostatnia cyfra 0 oznacza ramkę "write", a ostatnia cyfra 1 oznacza "read", czyli adres 0x62 w nocie SCD41 oznacza 0xC4 dla nadawania i 0xC5 dla odbioru Nie w AVR tylko ogólnie w I2C. Najmniej znaczący bit określa typ operacji zapis/odczyt. 7 bardziej znaczących bitów to adres urządzenia. Autorzy not urządzeń I2C...
uwaga techniczna - przy dzieleniu przez potęgę dwójki, lepiej jest robić przesunięcia bitowe, gdyż zajmują wiele wiele mniej operacji. http://www.atmel.com/dyn/resources/prod_... tutaj możesz zobaczyć na pierwszej stronie ile co zajmuje operacji. Przesunięcie bitowe to jedna instrukcja... :)
TH0 i TL0 to rejestry 8-bitowe - przy czym TH0 to starszy, a TL0 młodszy bajt licznika T0... zatem, aby prawidłowo wpisać je do zmiennej typu unsigned int, należy najpierw TH0 przesunąć o 8 bitów w lewo, a następnie operacją bitową (OR) dodać młodszą część licznika. Załóżmy, że: (odstępy zrobiłem dla lepszej czytelności) TH0 = 0b 1000 1000 TL0 = 0b...
Przesuń w lewo (SHL) i złącz (OR). Podstawowe operacje logiczne są dostępne w każdym języku. [syntax=delphi]wynik = (czesc_pierwsza shl 8) or czesc_druga[/syntax] Dostosuj tylko typ zmiennej.
Twój LM75 jest na I2C, zakładam więc że umiesz odczytać z niego te dwa bajty z wartością temperatury. Sprawdzasz najstarszy bit, starszego bajtu w odczytanym z czujnika wyniku. jeśli jest równy 0, to znaczy że temperatura jest dodatnia i wynik liczysz poprzez: 1. przesunięcie otrzymanego z czujnika wyniku o 5 bitów w prawo 2. pomnożenie rezultatu tej...
Chodzi o pomnożenie próbki przez liczbę x z zakresu 0-255 i potem przesunięcie o 8 bitów w prawo, żeby uzyskać próbkę o współczynniku x/255, tak? Dokładnie. Mnożenie ma niewielki narzut (procesor ma instrukcję MUL), a dzielenie przez 256 to po prostu obcięcie najmniej znaczącego bajtu. Stałą? Przecież volume_coefficient to zmienna. Owszem, ale nie...
Jeśli już chcesz sprawdzać parzystość liczby, to musisz to po prostu zrobić w pętli, której warunkiem wyjścia będzie nieparzysta liczba. Ty sprawdzasz raz i losujesz drugi raz i na tym koniec. A jeśli nie, to można po prostu zastosować ogólny wzór na liczbę nieparzystą jako 2x-1 , dostosowując teraz do tego tylko zakres losowania (zmniejszony i połowę...
No nie jest poprawna, bo kolejne zapisy kasują poprzednie. Musiałbyś użyć operacji sumy bitowej (|). Kolejna sprawa, że coś przesunięte o więcej niż 8 bitów po operacji & 0xFF da zero, więc maskę też trzeba odpowiednio zmienić. IMHO o wiele przejrzyściej jest wykorzystać unie.
Napisz z jakiego kompilatora korzystasz i na jakim poziomie optymalizacji kodu wynikowego. Jeśli chodzi o standardy C to ISO99 mówi o ujemnym przesunięciu bitowym " the behavior is undefined" i właśnie dlatego lepiej unikać takich operacji. Jeśli koniecznie musisz być przygotowany na ujemne przesunięcia może utwórz własną funkcję: [syntax=c] uint8_t...
Jeżeli te operacje mają na celu np. monofonizację sygnału to robi to się wg następujacego wzoru: M=\frac{X+Y}{2} (****) Dodajemy w zmiennej 16 bitowej ze znakiem a wynik po podzieleniu przez 2 zapisujemy w 8 bitowej ze znakiem. Nie podzielenie wyniku przez dwa powoduje wyprowadzenie wyniku poza zakres 8 bitowy. Obcinanie typu if x>127 then x=127 nie...
co to robi: int foo(uint32_t a) { a = a ^ (a >> 16); a = a ^ (a >> 8); a = a ^ (a >> 4); a = a ^ (a >> 2); a = a ^ (a >> 1); return a & 1; } Wstępna ocena dostępnych informacji Przedstawiony kod to funkcja `foo`, która przyjmuje jako argument 32-bitową liczbę bez znaku `a` (`uint32_t`). Funkcja wykonuje szereg operacji bitowych na tej liczbie i zwraca...
Witam 1. Proszę w google wpisać słowo klucz "AVR operacje bitowe" ( >> << & ^ ~) 2. Dobrze użyć #define do opisania co to jest LED0, LED1, jeśli zmieni się miejsce przyłączenia diody to później trzeba będzie pilnować każdego odwołania do takiej diody. 3. Nie ma potrzeby zmieniać stanu wszystkich 8 bitów portu D, wystarczy przesunąć ten...
Tak, ma. Proponowałem Ci we wcześniejszym poście przeczytanie strony AvrSide. Gdybyś mnie posłuchał to wszystkiego byś się dowiedział. Jest tam taki fragmencik: Avr-gcc nie posiada składni bezpośredniego dostępu do bitów zmienna.numer_bitu. Operacje na bitach wykonujemy używając iloczynu i sumy bitowej, np. dla bajtu: zmienna |= _BV(numer_bitu); //...
Tu masz troszkę prościej, z użyciem operacji przesunięcia bitowego (krótszy kod, łatwiejsza zmiana prędkości linijki led) Dim Led As Byte Dim Kier As Bit Config Portb = Output 'wszystkie porty b jako wyjścia' Portb = &B00000000 'wszystkie porty b w stanie niskim Config Portd = Output 'wszystkie porty d jako wyjscia Portd = &B0000000 'wszystkie porty...
Witam, język programowania C oferuje operację arytmetyczną powodującą przesunięcie bitowe, np: a | a<<1 | a<<2 | a>>1 ------+------+------+------- 0001 | 0010 | 0100 | 0000 chciałbym aby przesunięcie następowało w sposób cykliczny, bez zgubienia "1" czyli np 1000 << 1 = 0001; W AVR były do tego specjalne instrukcje w assamblerze,...
Rozwijając to co pisał snnaap o nadpisywaniu, dla pewności lepiej wszystkie wartości maskować/warunkować, wtedy nie ma żadnych nieprzyjemności, jeśli zapomni się o dozwolonych wartościach. Dodatkowo, coś mi nie pasuje przy wysyłaniu danych po SPI. Zakładając, że funkcja wysyła bajt, to w pierwszej linii wysyłasz młodszy bajt słowa, a za drugim razem...
Dzięki za odzew Szybkość, szybkość, szybkość - jak wspomniałem program wykonuje tylko przeliczanie liczb binarnych 8-bitowych (x8 liczb) (nawet nie zmiennoprzecinkowych)(statystycznie rzecz biorąc najwięcej jest operacji typu przesunięcie bitowe) więc interesuje mnie coś co będzie miało zegar ustawiony na MAX (bo podejrzewam, że wszystkie procesory...
Cześć. Należy pamiętać, że w MODBUS'ie słowa zabezpieczające informacje zależą od trybu transmisji. Na początek może LRC, czyli Longitudinal Redundancy Check - jest on dołączany przez nadajnik jako ostatnie pole ramki, bezpośrednio przed znacznikami końca linii (Carriage Return i Line Feed) w trybie ASCII. Najkrótsza droga do osiągnięcia tego słowa...
U mnie nie działa... Sam nie wiem, podobno można to w łatwy sposób rozwiązać sprzętowo. No nic, będę dalej próbował. Co rejestrów to jakoś tak się nauczyłem, a jak mam większą liczbę to z pomocą przychodzi mi kalkulator:) Chociaż pewnie przesunięcie bitowe jest łatwiejszą operacją. Dzięki z pomoc. Pzdr
PD1 wynosi 1 (bity są zadeklarowane jako numer bitu od 0 do 7) 1 przesunięte o 1 daje 0000 0010 suma logiczna ustawi ci 1 bit rejestru
Troszkę nieprecyzyjnie się wyraziłem. Chodziło mi o to jak będą wyglądały operacje po rozbiciu tego złożonego wyrażenia i chyba sam sobie odpowiedziałem :-) Otóż: - bajt high będzie rzutowany na wartość 16 bitowa i przesunięty o osiem bitów - bajt low będzie rzutowany na wartość 16 bitową - oba operandy zostaną poddane operacji sumy logicznej - wynik...
Mam drobne pytanie - wykonuję przesunięcie bitowe o zmienną: uchar a,b; a = 1<<b No i ta operacja zajmuje jakies 26 cykli procesora. Przesunięcie o stałą trwa jeden cykl bo raczej jest to zamieniane w czasie kompilacji a tutaj jest 'troszkę' wolniej. Czy można to jakoś przyspieszyć? Procesor - avr atmega32, kompilowane i analizowane w avr studio.
Proponuję zapomnieć o sbi i cbi . To jest dobre w assemblerze ale w C można się na tym przejechać (w zależności od wersji kompilatora). Na stronie # Avr-gcc nie posiada składni bezpośredniego dostępu do bitów zmienna.numer_bitu. Operacje na bitach wykonujemy używając iloczynu i sumy bitowej, np. dla bajtu: zmienna |= _BV(numer_bitu); // ustawienie bitu...
stany = twiread(NOACK); twistop(); LCD_GoTo(22,1); LCD_WriteText(" "); LCD_GoTo(22,1); int i = 128; for (; i; i>>=1) LCD_WriteText((stany&i?"1&q... Przeanalizujmy zatem. Linie 1 i 2 pomijam bo to dzieło kolegi. Linie 3 i 4 są zbędne. Linia 5 ustawia...
ok, już wyjaśniam - operacje bitowe wykonują się dużo szybciej niż dzielenie, przykładzik: liczba AND 255 - zerujemy wszystkie bity oprócz ostatnich ośmiu które pozostają bez zmian. Jest to odpowiednik reszty z dzielenia przez 256. przesunięcie bitowe w prawo jest odpowiednikiem części całkowitej z dzielenia przez jakąś potęgę dwójki - przesunięcie...
Operatory postaci: zmiennaA += zmiennaB; zmiennaA |= zmiennaB; zmiennaA &= zmiennaB; //itp... są równoważne zapisowi: zmiennaA = zmiennaA + zmiennaB; zmiennaA = zmiennaA | zmiennaB; zmiennaA = zmiennaA & zmiennaB;//itp... Co do samych operatorów: "|" to bitowe OR "&" to bitowe AND "~" to bitowa negacja. Zapis (1 << 3) to przesunięcie...
Jeśli to Cortex, to użyj bitbandingu, jeśli nie, to jeśli bardzo chcesz możesz kombinować, ale także moim zdaniem nie jest to dobry pomysł - operacje te i tak będą wykonywane przez odczyt i maskowanie + ewentualne przesunięcie, więc lepiej widzieć to wprost (IMHO). 4\/3!!
chyba zrozumialem - jesli nie wyprowadzcie mnie z bledu: - PORTC - moze miec dowaolna 8 bitowa liczbe, - wykonanie operacji PORTC & ~0x3f dla PORTC rownego 10010011 wynosi 10000000, - teraz wartosc PC1 moze byc 0 lub 1 (czyli bedziemy mogli przesunac o jedno miejsce w prawo lub wogole), - wykonanie operacji ( PORTC & ~0x3f ) | 1 << PC1...
Aaaaa, no to wiele tłumaczy :) Musisz zastosować przesunięcie bitowego. Twoja 16 bitowa wartość jest zapisana w dwóch rejestrach 8 bitowych. Czyli została podzielona na młodszy i starszy bajt. Gdybyś zrobił normalne przypisanie: rejestrH o osiem bitów w zmiennej doWysłania , to spowoduje że dostaniemy wartość: 1111111100000000 Zamiast (tak jak na początku):...
Zgaduję, że to kontynuacja wątku dotyczącego wyświetlacza http://www.elektroda.pl/rtvforum/viewtop... Problemem nie jest SPI, tylko sposób w jaki przygotowujesz dane do przesłania. Zabijasz wydajność całą serią operacji, które nie powinny mieć miejsca podczas transmisji: odejmowanie, przesunięcie bitowe, iloczyn logiczny...
Tak na początek: 1. long to raptem 32-bitowa zmienna. Jako, że w ogóle pracujemy w zbiorze liczb dodatnich, to od razu bym skorzystał z unsigned, co spowoduje podwojenie dostępnego zakresu. 2. Zakres unsigned long to 4G, zatem pomieści on śmiało liczby do fib(47). Ale tworząc tablicę, której indeksy są wartościami, a wartością - tylko proste tak/nie,...
Ten kod w STM jak na razie jest dla mnie mało przejrzysty. Nie rozumiem za bardzo co robi ten kod: [syntax=c] if ((przechowuje = ((przechowuje << 1) & 0x0F) | ostatnia) == 1) { keypin_pressed = 1; } [/syntax] Załóżmy, że wcisnąłem PD5, a wcześniej wcisnąłem PD6. Czyli przechowuje to jest wartość 0X20, a ostatnia to 0X10. Jak zrobię przesunięcie...
nie znam się na VHDL-u, ale przypuszczam, że potrafi on robić operacje bitowe na zmiennym (co nie jest oczywiste, bo C tego nie potrafi na typie zmiennoprzecinkowym). Wystarczy zamaskować odpowiednie bity liczby i przesunąć o odpowiednią liczbę pozycji w prawo. W ten sposób można uzyskać wszystkie "składowe" liczby zmiennoprzecinkowej.
Drogi panie kolego zegar został sprawdzony z chipem oryginalnym wsadem i działa, jeżeli chodzi o ai wykonało poprawnie program na test diody oraz test diody z sygnałem chipu ds1 302, jeżeli chodzi o to czemu nie może poprawnie wykonać testu wyświetlaczy to problem polega na tym, że większość oprogramowań jest albo na arduino z innym mikrokontrolerem,...
co każda z nich oznacza? Oczywiście, chętnie wyjaśnię znaczenie każdej z tych instrukcji dla mikrokontrolera Atmega8: 1. Instrukcje arytmetyczne i logiczne: - ADD (dodawanie): Dodaje wartości z dwóch rejestrów i zapisuje wynik w jednym z nich. - ADC (dodawanie z przeniesieniem): Dodaje wartości z dwóch rejestrów oraz bieżącą wartość przeniesienia (carry)...
Może warto zacząć od podstawowych obliczeń? Dane dla wyświetlacza to 480x640x3 = 921600 bajtów = 900 KiB. Pierwsze wrażenie może być takie, że wewnętrznej pamięci nie wystarczy na bufor obrazu, ponieważ nie jest to jednolity blok i część tej pamięci trudno współpracuje z DMA i LTDC. Ale w prostych aplikacjach, bez zaawansowanej grafiki, można ograniczyć...
a jak chcesz przesunac zmienna opisana na 8 bitach o 24 bity? Oczywista sprawa, ze wyjdzie z tego zero. Drobna uwaga. Operacje arytmetyczne zasadniczo wykonują się na typie podstawowym int/uint, który jest domyślnie (na AVR) 16-bitowy. W przypadku zapisu tmp8<<24, gdzie tmp8 jest typu uint8_t, kompilator najpierw zrzutuje zmienną na typ uint...
div, mod to cholernie wolne instrukcje. Najpierw sprawdz czy twój int jest 16 czy 32 bitowy. Potem robisz (dla 32 bitowego, dla 16 bitowego robisz tylko bajt1 i 2) bajt4=(zmiennaint>>24)&... //najstarszy bajt bajt3=(zmiennaint>>16)&... bajt2=(zmiennaint>>8)&... bajt1=(zmiennaint>>0)&...
Wiadomo, że jeśli pomnoży się liczbę przez (2 ^ ilość bitów W bajcie) to liczba przesunie się o 1 bajt. Zatem wystarczy liczbę pomnożyć przez (2 ^ ilość bitów w bajcie) tyle razy ile jest bajtów w liczbie - 1 a następnie podzielić wynik w ten sam sposób. Wszystko się zgadza, ale nie zadziała w tym przypadku przepełnienie bitowe, jako, że operujemy...
dystans <= ((v_dzwieku / f_zegara)*(zliczone_takty)... - korekcja; o ile operacja mnożenia jest dobrze określona, o tyle w przypadku dzielenia musisz użyć jakiegoś układu który ci ten wynik dzielenia obliczy, no chyba że dzielisz tylko przez 2^n, wtedy wystarczy przesunąć bitowo w prawo. Obawiam się jednak że próbujesz zrobić...
Proponuję rozbić całość na 2 funkcje. 1. Inicjalizacja wartości sumy wywoływana przy każdej zmianie szerokości okna. W ten sposób masz bezpieczny i niezależny sposób zmiany szerokości okna. Wejście: MAFTABlenght Wyjście: None, ew. status. Operacja: Wyznaczenie wartości MAFUTABpointer oraz MAFUSum. 2. Obliczanie wartości po dodaniu kolejnej próbki, czyli...
Przesunięcia bitowe będą najszybsze. I to jest konkretna odpowiedź! Dzięki! Co do basica-próby z .NET skutkowały nieregularnym występowaniem nadmiernych opóźnień komunikacji z peryferiami. "Wypracować 144 bity" znaczy np. a> zrobić odpowiednie przesunięcie i wyłuskać bit bezpośrednio w danym działaniu b> wyłuskać bit i zapisać go do zmiennej bool w...
Nie podałeś nawet procka na czym to chodzi żeby rozgryźć ten rejestr, ale wnioskując po nazwie rejestru pewnie cortex od st. Rejest BSRR jest 32-bit. Mniej znaczące 16-bit służy do ustawienia pinu, a starsze szesnaście do wyzerowania. Czyli przykładowo GPIOC->BSRR = 0x0001 ustawia pin C0 na '1' GPIOC->BSRR = 0x0100 ustawia pin C0 na '0' Teraz pod warunkiem...
przesuniecie bitowe operacje bitowe operacje logiczne
balans bieli ustawienia samsung linia energetyczny focus kontrolka poduszka
rekuperacja mieszkanie schemat elektryczny silnika ducato
Pralki z rozbieralnym bębnem: Miele, Bosch, Siemens, AEG, Asko, Haier, Gorenje – lista modeli 2024 Citroën C3, Peugeot – kod błędu P1337, wypadanie zapłonów cylinder 1, diagnostyka