Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 22 sty 2026, o 21:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 12 gru 2016, o 13:04 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 19 lis 2016
Posty: 21
Pomógł: 0

Witam
chciałbym zapytać czy podczas zwiększania zmiennej lub zmniejszania


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jestem w stanie wykryć przepełnienie zmiennej ?
ps. (w asm są znaczniki przepełnienia rejestru )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 13:15 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

zawsze gdy osiągnie zero to masz przepełnienie - tylko wywal ten typ float i stosuj typy całkowite

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 14:35 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 19 lis 2016
Posty: 21
Pomógł: 0

no tak ale jak wykryć przepełnienie ? ? jest to jakoś sygnalizowane w C ? jakiś rejestr zmienna ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 14:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 582
Pomógł: 17

mozna tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 14:58 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Do powyższego przykładu miałbym tylko 2 małe uwagi:
1. nie należy inicjalizować zmiennej wartością 0. To jest zmienna globalna i jako taka zostanie to zrobione automagicznie ;-)
2. przy wartości 255 jeszcze nie jest przepełniona lecz osiąga wartość maksymalną dla tego typu zmiennej. Raczej należałoby sprawdzać czy zmienna == 0 co się sprawdzi ponieważ jest inkrementowana przed warunkiem

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 14:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

tommot napisał(a):
no tak ale jak wykryć przepełnienie ? ? jest to jakoś sygnalizowane w C ? jakiś rejestr zmienna ?


Ci którzy wcześniej programowali w Bascomie mają problem bo nie mogą się pozbyć nawyków z Bascoma

i niestety ci którzy wcześniej programowali w asemblerze też często mają taki sam problem - nie mogą się pozbyć nawyków z asm. Język C nie opiera się na żadnych rejestrach przepełnienia bo to byłaby bzdura ...

za każdym razem gdy zmienna osiąga maksymalną wartość w swoim typie zostaje zerowana. W asemblerze mogłeś mieć z tym do czynienia tylko dla wartości jedno-bajtowych tak? czy nie ?

natomiast w C możesz mieć typy 16- 32-bitowe ...

Dla ciebie zrobienie w asemblerze dodawania liczby 32-bitowej to już masakra - bo trzeba się narzeźbić kodu ;) a tutaj ? .... a tutaj

uint32_t zmienna;

zmienna++;

i to wszystko ... nikt się nie bawi w dodawanie na poziomie operacji asm

więc proponuję - zapomnieć na chwilę o asemblerze i próbować wczuć się w C ... zapewniam cię, że da radę - miliony ludzi dało radę - ja też ;) A pamiętam że sam kiedyś miałem z tym problemy - lecz dopiero odrzucenie ciągłego myślenia asemblerem - pomogło ;)

------------------------ [ Dodano po: kilkunastu sekundach ]

MirkoT napisał(a):
Do powyższego przykładu miałbym tylko 2 małe uwagi:
1. nie należy inicjalizować zmiennej wartością 0. To jest zmienna globalna i jako taka zostanie to zrobione automagicznie ;-)
2. przy wartości 255 jeszcze nie jest przepełniona lecz osiąga wartość maksymalną dla tego typu zmiennej. Raczej należałoby sprawdzać czy zmienna == 0 co się sprawdzi ponieważ jest inkrementowana przed warunkiem


Bardzo cenne uwagi

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 15:06 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 19 lis 2016
Posty: 21
Pomógł: 0

mirekk36 napisał(a):
a każdym razem gdy zmienna osiąga maksymalną wartość w swoim typie zostaje zerowana. W asemblerze mogłeś mieć z tym do czynienia tylko dla wartości jedno-bajtowych tak? czy nie ?

natomiast w C możesz mieć typy 16- 32-bitowe ...

Dla ciebie zrobienie w asemblerze dodawania liczby 32-bitowej to już masakra - bo trzeba się narzeźbić kodu ;) a tutaj ? .... a tutaj



Oczywiście zgadza się :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 15:07 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Nie, z punktu widzenia C nie jest zgłaszany. Jako programista musisz sam się o to postarać i sprawdzić.
Zresztą w asm jest dokładnie tak samo. Jako programista musisz sobie sprawdzić czy poszczególne bity
w rejestrze zostały ustawione.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO