рдПрдХ рдмрд╛рд░, рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдореБрдЭреЗ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ C рдХреЛрдб рдХреА
рдЫрд╣ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде
рдореМрдд рдХреА рдиреАрд▓реА рд╕реНрдХреНрд░реАрди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдВрдбреЛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ
рдПрдХ рдЕрдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдУрдПрд╕ рдЦреБрдж рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╕рднреА рдХреЛ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХреЛрдб рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рднрд╛рдЧ рджреЗрдирд╛ рдПрдХ рдЕрдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢ рд╣реИред
#include <stdio.h>
int main()
{
int a = 2 / 0;
printf ("%d", a);
return 0;
}
, (, warning).
, : .
INT_MIN / -1
тАФ
INT_MIN -1.
, INT_MIN=
тИТ2,147,483,648=-231, INT_MAX=
2,147,483,647=231-1. , : int , , .
, INT_MIN -1 int .
, , :#include <stdio.h>
#include <limits.h>
int main()
{
int a = INT_MIN;
int b = -1;
int c = a / b;
printf ("%d", c);
return 0;
}
Windows
Windows . - . - , : .
WinAPI , , . тАФ ScaleWindowExtEx. тАФ .
:
BOOL ScaleWindowExtEx(
_In_ HDC hdc,
_In_ int Xnum,
_In_ int Xdenom,
_In_ int Ynum,
_In_ int Ydenom,
_Out_ LPSIZE lpSize
);
, , . , тАФ .
Xnum / Xdenom тАФ x.
Ynum / Ydenom тАФ y.
. , (device context) . , , - . , SetLayout.
, CreateCompatibleDC (NULL). SetLayout. ScaleWindowExtEx .
, , Windows .
INT_MIN -1 . - , .
gdi32.lib Windows:
#include <windows.h>
#include <limits.h>
int main()
{
HDC dc = CreateCompatibleDC (NULL);
SetLayout (dc, LAYOUT_RTL);
ScaleWindowExtEx (dc, INT_MIN, -1, 1, 1, NULL);
}
:
#include <windows.h>
int main() {
HDC dc = CreateCompatibleDC (NULL);
SetLayout (dc, LAYOUT_RTL);
ScaleWindowExtEx (dc, -2147483647 - 1, -1, 1, 1, NULL);
}
INT_MIN -2147483648, , limits.h. , , . - .
Windows Vista, 7 8. 32- , 64- ( 64- ).
P.S. bash, .
UPDATE1: ((int) 0x8000/0x80000000) (-2147483647 тАФ 1), . , AndreyDmitriev alper.
UPDATE2: Microsoft .
UPDATE3: ┬л┬╗: blog.cmpxchg8b.com/2013/02/the-other-integer-overflow.html.