Jakie jest zachowanie dzielenia liczb całkowitych?
Na przykład,
int result;
result = 125/100;
Lub
result = 43/100;
Czy wynik zawsze będzie podłogą dywizji? Co to jest zdefiniowane zachowanie?
5 answers
Czy wynik zawsze będzie podłogą dywizji? Co to jest zdefiniowane zachowanie?
Tak, iloraz liczb całkowitych obu operandów.
6.5.5 operatory Multiplikatywne
6 Gdy liczby całkowite są podzielone, wynikiem operatora / jest iloraz algebraiczny z dowolnym część ułamkowa odrzucona.88) jeśli iloraz a / b jest reprezentowalny, wyrażenie (a / b) * b + A%B równa się a.
I "odpowiedni przypis": {]}
88) jest to często nazywane "okrojeniem w kierunku zera".
Oczywiście dwa punkty do odnotowania to:
3 zwykłe konwersje arytmetyczne są wykonywane na operandach.
I:
5 wynikiem działania / operatora jest iloraz z podziału na pierwszy operand po drugim; the wynik operatora % to reszta. w obu operacjach, jeśli wartość drugi operand to zero, zachowanie jest nieokreślone.
[Uwaga: moje podkreślenie]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-30 17:32:04
Dirkgently daje doskonały opis dzielenia liczb całkowitych w C99, ale powinieneś także wiedzieć, że w C89 dzielenie liczb całkowitych z ujemnym operandem ma zdefiniowany kierunek implementacji.
Z projektu ANSI C (3.3.5):
Jeśli któryś z operandów jest ujemny, to czy wynik operatora / jest największą liczbą całkowitą mniejszą od ilorazu algebraicznego, czy najmniejszą liczbą całkowitą większą od ilorazu algebraicznego jest zdefiniowany w implementacji, tak jak znak wynik operatora%. Jeśli iloraz a / b jest reprezentowalny, wyrażenie (a/b)*B + A%B jest równe a.
Więc uważaj z liczbami ujemnymi, gdy utkniesz z kompilatorem C89.
Ciekawostką jest to, że C99 wybrał okrojenie w kierunku zera, ponieważ tak zrobił FORTRAN. Zobacz tę wiadomość {[2] } na komp.choroby weneryczne.c.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:26
Gdzie wynik jest ujemny, C obraca się w kierunku 0, a nie podłogi - dowiedziałem się tego czytając o tym, dlaczego Python integer division always floors tutaj: Dlaczego Python Integer Division Floors
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-30 17:55:17
Tak, wynik jest zawsze obcięty w kierunku zera. Będzie zaokrąglać w kierunku najmniejszej wartości bezwzględnej.
-5 / 2 = -2
5 / 2 = 2
Dla niepodpisanych i nieujemnych wartości sygnowanych jest to to samo, co floor (zaokrąglenie w kierunku-nieskończoności).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-07 04:26:50
Nie. Wynik jest różny, ale zmienność występuje tylko dla wartości ujemnych.Czy wynik zawsze będzie podłogą dywizji?
Jakie jest zdefiniowane zachowanie?
Aby było jasne, że rundy podłogowe w kierunku ujemnej nieskończoności, podczas gdy liczba całkowita rundy w kierunku zera (okrojenia)
Dla wartości dodatnich są takie same
int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0
Dla wartości ujemnej jest to inne
int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-06 07:50:35