рдЬрд╛рд╡рд╛ рдореЗрдВ рдмрд┐рдирд╛ рдЕрдВрдХрдЧрдгрд┐рдд

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдИ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ C рдореЗрдВ рдЖрдк 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)
      
      





рдЕрдВрддрд┐рдо рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ






All Articles