unsigned int
(
char
,
long
) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдХреНрд╕рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдЖрдзреЗ рд╕реЗ рдХрдо
MaxInt
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
MaxInt
рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрд╕
long
рдФрд░ рдЖрдЧреЗ
BigInteger
рд▓реЗрдирд╛ рд╣реЛрдЧрд╛)ред рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдЕрдВрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдпрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЗрдВрдЯ рдореЗрдВ рдХрд┐рддрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдирдВрдмрд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрди рдкрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдФрд░ рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд╛рдЗрдирд░реА рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рд░ рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореЛрдб рдореЗрдВ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд░рдо рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдмрд╛рдЗрдЯ рдХреЛ рд╢реЙрд░реНрдЯ рдореЗрдВ рдмрджрд▓реЗрдВ (int, long)
рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд╕реНрдЯ
(int) myByte
рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде 32 рдмрд┐рдЯреНрд╕ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ 1 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╣реА рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди 32-рдмрд┐рдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
0xff -> 0xffffffff (-1)
рдЕрдХреНрд╕рд░ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗред 32 рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдмрд┐рдЯреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░
0x000000ff
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдореЗрдВ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
int myInt = myByte & 0xff; short myShort = myByte & 0xff;
рд╕рд╛рдЗрди-рдХрдо рддреБрд▓рдирд╛
рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрддреНрд░ рд╣реИ:
int compareUnsigned(int a, int b) { return Integer.compare( a ^ 0x80000000, b ^ 0x80000000 ); }
рдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд╢рдГ рдЫреЛрдЯрд╛ рдФрд░ рд▓рдВрдмрд╛, рд╕реНрдерд┐рд░рд╛рдВрдХ
0x8000
,
0x8000
рдФрд░
0x8000000000000000L
ред
рдЬреЛрдбрд╝, рдШрдЯрд╛рд╡ рдФрд░ рдЧреБрдгрд╛
рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реИ - рдпреЗ рдСрдкрд░реЗрд╢рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдПрдХ рд╕рд╛рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдореНрдореАрдж рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреАрдбрд╝реЗ рдХреА рдЬрд┐рдж рдПрдХ рдЧрд▓рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╣реБрдд рдХрдо рд╣реА рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рднрд╛рдЬрди
рд▓рд╛рднрд╛рдВрд╢ -256 рдХреЛ 256 рд╣рдо -1 рджреЗрдВрдЧреЗред рдФрд░ рд╣рдо
0x00ffffff
0xffffff00 / 0x100
0x00ffffff
рджреЗрдирд╛
0x00ffffff
, рди рдХрд┐
0xffffffff (-1)
ред
byte
,
short
рдФрд░
int
рд╕рдорд╛рдзрд╛рди рдЙрдЪреНрдЪ рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
int a = 0xffffff00; int b = 0x100; int c = (int) ((a & 0xffffffffL) / b); // convert a to long before division
рд▓реЗрдХрд┐рди
long
рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ
BigInteger
рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ - рдмрд╣реБрдд рдзреАрдорд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓реЗрдиреЗ рдФрд░ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рд╕рдмрдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреЛрд░реА рд╣реЛ рдЧрдпрд╛ рд╣реИ - Google рдЕрдорд░реВрдж рдореЗрдВ
long
рд▓рд┐рдП рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдирд╕рд╛рдЗрдиреНрдЯ рдХрд┐рдП рдЧрдП рд▓реЛрдВрдЧреЛрдВ рд╕реЗ рд╕реАрдзреЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдлрд╛рдбрд╝ рджреЗрдВред рдЬрд╛рд╡рд╛ рдлрд╛рдЗрд▓:
/** * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 64-bit * quantities. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) * @throws ArithmeticException if divisor is 0 */ public static long divide(long dividend, long divisor) { if (divisor < 0) { // ie, divisor >= 2^63: if (compare(dividend, divisor) < 0) { return 0; // dividend < divisor } else { return 1; // dividend >= divisor } } // Optimization - use signed division if dividend < 2^63 if (dividend >= 0) { return dividend / divisor; } /* * Otherwise, approximate the quotient, check, and correct if necessary. Our approximation is * guaranteed to be either exact or one less than the correct value. This follows from fact * that floor(floor(x)/i) == floor(x/i) for any real x and integer i != 0. The proof is not * quite trivial. */ long quotient = ((dividend >>> 1) / divisor) << 1; long rem = dividend - quotient * divisor; return quotient + (compare(rem, divisor) >= 0 ? 1 : 0); }
рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
compare(long, long)
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЙрдзрд╛рд░ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛:
/** * Compares the two specified {@code long} values, treating them as unsigned values between * {@code 0} and {@code 2^64 - 1} inclusive. * * @param a the first unsigned {@code long} to compare * @param b the second unsigned {@code long} to compare * @return a negative value if {@code a} is less than {@code b}; a positive value if {@code a} is * greater than {@code b}; or zero if they are equal */ public static int compare(long a, long b) { return Longs.compare(flip(a), flip(b)); }
рдФрд░
Longs.compare(long, long)
+
flip(long)
:
/** * A (self-inverse) bijection which converts the ordering on unsigned longs to the ordering on * longs, that is, {@code a <= b} as unsigned longs if and only if {@code flip(a) <= flip(b)} * as signed longs. */ private static long flip(long a) { return a ^ Long.MIN_VALUE; } /** * Compares the two specified {@code long} values. The sign of the value * returned is the same as that of {@code ((Long) a).compareTo(b)}. * * @param a the first {@code long} to compare * @param b the second {@code long} to compare * @return a negative value if {@code a} is less than {@code b}; a positive * value if {@code a} is greater than {@code b}; or zero if they are equal */ public static int compare(long a, long b) { return (a < b) ? -1 : ((a > b) ? 1 : 0); }
рдмрд┐рдЯ рдкрд╛рд▓реА
рдЕрдВрдд рдореЗрдВ рдмрд┐рдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рднреА рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред X86 рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреАрдореЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рд╢рд┐рдлреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ - SHL, SHR, SAL, SAR, ROR, ROL, RCR, RCLред рдЕрдВрддрд┐рдо 4 рдЪрдХреНрд░реАрдп рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ; рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдИ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдмрджрд▓рд╛рд╡ рдореМрдЬреВрдж рд╣реИрдВред рд▓реЙрдЬрд┐рдХрд▓ рд╢рд┐рдлреНрдЯ (рд╕рд╛рдЗрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ) - SHL (рд╢рд┐рдлреНрдЯ рд▓реЗрдлреНрдЯ) рдФрд░ SHR (рд╢рд┐рдлреНрдЯ рд░рд╛рдИрдЯ) - рдХреЛ рдХреНрд░рдорд╢рдГ
<<
рдФрд░
>>>
рдСрдкрд░реЗрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрд╛рд░реНрдХрд┐рдХ рдкрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рджреЛ рдХреА рд╢рдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрди рдФрд░ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрдХрдЧрдгрд┐рдд рд╢рд┐рдлреНрдЯ рджрд╛рдИрдВ рдУрд░ SAR (рд╕рд╛рдЗрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ) - SAR - рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
>>
рдЕрдВрдХрдЧрдгрд┐рдд рдмрд╛рдИрдВ рдкрд╛рд░реА рддрд╛рд░реНрдХрд┐рдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдУрдкрдХреЛрдб рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдПрд╕рдПрдПрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд╕рдПрдЪрдПрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрдВрдЯреЗрд▓ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╢рд┐рдлреНрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдмрд╛рдПрдВ (SAL) рдФрд░ рд╢рд┐рдлреНрдЯ рд▓реЙрдЬрд┐рдХрд▓ рд▓реЗрдлреНрдЯ (SHL) рдирд┐рд░реНрджреЗрд╢ рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ; рд╡реЗ рдЧрдВрддрд╡реНрдп рдСрдкрд░реЗрдВрдб рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдУрд░)ред рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реА рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП, рдЧрдВрддрд╡реНрдп рдСрдкрд░реЗрдВрдб рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╕реАрдПрдл рдзреНрд╡рдЬ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреА рдЬрд╛рддреА рд╣реИ (рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВ Intel764 рдореЗрдВ 7-7 рдФрд░ IA-32 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдореИрдиреБрдЕрд▓, рд╡реЙрд▓реНрдпреВрдо 1 )ред
рдпрд╣реА рд╣реИ, SAL рдХреЛ рдХреЗрд╡рд▓ рд╕рдорд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рдЕрдВрдХрдЧрдгрд┐рдд рдореЗрдВ рдПрдХ рд╡рд┐рднрд╛рдЬрди рд╣реИред рдЦреИрд░, рдЧреЛрд╕рд▓рд┐рдВрдЧ рдиреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдФрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛)ред
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
a << 1; // , 2 a >> 1; // ( 2) a >>> 1; // ( 2)
рдЕрдВрддрд┐рдо рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
- рдЬрдм рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЪрдпрдирд┐рдд рдмрд┐рдЯ рдЧреНрд░рд┐рдб рдореЗрдВ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЪрд░ рдорд╛рдирдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдиреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЦрд░рддрд╛ рд╕реЗ рдЗрди рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрдм рджреЛ рдордирдорд╛рдирд╛ 32-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо 32 рдмрд┐рдЯреНрд╕ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рдЙрддреНрдкрд╛рдж 32 рдмрд┐рдЯреНрд╕ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред , рдпрд╛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рджреЛрдиреЛрдВ рдСрдкрд░реЗрдВрдб рдХреЛ рд▓рдВрдмреЗ (
a & 0xffffffffL
) рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдСрдкрд░реЗрдВрдб рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрд▓рддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд╣реАрдВ, рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рджреВрд╕рд░рд╛ рдСрдкрд░реЗрдВрдб рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рд╛рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЧреБрдгрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╣реЛрдЧрд╛ред - рдЙрди рдХреЛрд╖реНрдардХреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд░рдЦреЗрдВ рдЬрд╣рд╛рдБ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреБрдЫ рдЕрдЬреАрдм рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рд╕реВрдХреНрд╖реНрдо рдмрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
- рдпрджрд┐ рдЖрдкрдХреЛ
long
рд╕реНрдерд┐рд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд┐рд░ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рддреНрдпрдпL
рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣long
рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рдиint
, рдФрд░ рдпрджрд┐ рдЖрдк рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВlong
рдбрд╛рд▓реЗ рдЬрд╛рддреЗlong
рд╕рд╛рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдкреНрд░рд┐рдп рд╣реИ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛ред