Venstre skift(<<)
Det er en binær operator, der tager to tal, til venstre forskyder bits af den første operand, og den anden operand bestemmer antallet af steder, der skal skiftes. Med andre ord, venstreforskydning af et heltal -en med et heltal b betegnet som ' (a< svarer til at gange -en med 2^b (2 hævet til potens b).
Syntaks:
a << b;>
- a: Første Operand b: Anden Operand
Eksempel: Lad os tage a=5 ; som er 101 i binær form. Nu, hvis a er forskudt til venstre med 2 dvs a=a<<2 derefter -en vil blive a=a*(2^2) . Dermed, a=5*(2^2)=20 som kan skrives som 10100.
C
nbsp
// C Program to demonstrate use> // of left shift operator> #include> // Driver code> int> main()> {> > // a = 5(00000101), b = 9(00001001)> > unsigned> char> a = 5, b = 9;> > // The result is 00001010> > printf> (> 'a<<1 = %d
'> , (a << 1));> > // The result is 00010010> > printf> (> 'b<<1 = %d'> , (b << 1));> > return> 0;> }> |
>
>
C++
// C++ Program to demonstrate use> // of left shift operator> #include> using> namespace> std;> // Driver code> int> main()> {> > // a = 5(00000101), b = 9(00001001)> > unsigned> char> a = 5, b = 9;> > // The result is 00001010> > cout <<> 'a<<1 = '> << (a << 1) << endl;> > // The result is 00010010> > cout <<> 'b<<1 = '> << (b << 1) << endl;> > return> 0;> }> |
>
>Produktion
a<<1 = 10 b<<1 = 18>
Højre skift(>>)
Det er en binær operator, der tager to tal, højreskifter bits af den første operand, og den anden operand bestemmer antallet af steder, der skal skiftes. Med andre ord, højreskifte et heltal -en med et heltal b betegnet som ' (a>>b) ’ svarer til at dividere a med 2^b.
Syntaks:
a>> b;>
- a: Første Operand b: Anden Operand
Eksempel: Lad os tage a=5 ; som er 101 i binær form. Nu, hvis a er forskudt til højre med 2 dvs. a=a>>2 derefter -en vil blive a=a/(2^2) . Dermed, a=a/(2^2)=1 som kan skrives som 01 .
C
// C Program to demonstrate> // use of right-shift operator> #include> // Driver code> int> main()> {> > // a = 5(00000101), b = 9(00001001)> > unsigned> char> a = 5, b = 9;> > // The result is 00000010> > printf> (> 'a>>1 = %d
'> , (a>> 1));> > // The result is 00000100> > printf> (> 'b>>1 = %d'> , (b>> 1));> > return> 0;> }> |
>
>
C++
10 af 100,00
// C++ Program to demonstrate> // use of right-shift operator> #include> using> namespace> std;> // Driver code> int> main()> {> > // a = 5(00000101), b = 9(00001001)> > unsigned> char> a = 5, b = 9;> > // The result is 00000010> > cout <<> 'a>>1 = '> <>1)<< endl;> > // The result is 00000100> > cout <<> 'b>>1 = '> <>1)<< endl;> > return> 0;> }> |
>
>Produktion
a>>1 = 2 b>>1 = 4>
Vigtige pointer
1. Venstre-shift- og højre-shift-operatorerne bør ikke bruges til negative tal. Resultatet af er udefineret adfærd, hvis nogen af operanderne er et negativt tal. For eksempel er resultater af både 1>> -1 og 1 << -1 udefineret.
C
// C program to show behaviour of shift operators for> // negative values> #include> int> main()> {> > // left shift for negative value> > printf> (> '2 << -5 = %d
'> , (2 << -5));> > // right shift for negative value> > printf> (> '2>> -5 = %d'> , (2>> -5));> > return> 0;> }> |
forespørgselsvælger
>
>
C++
// C++ program to show behaviour of shift operators for> // negative values> #include> using> namespace> std;> int> main()> {> > // left shift for negative value> > cout <<> '2 << -5 = '> << (2 << -5) << endl;> > // right shift for negative value> > cout <<> '2>> -5 = '> <>-5)<< endl;> > return> 0;> }> |
>
tur men
>Produktion
2 <>-5 = 64>
2. Hvis tallet forskydes mere end størrelsen af hele tallet, er adfærden udefineret. For eksempel er 1 << 33 udefineret, hvis heltal er lagret ved hjælp af 32 bit. For bitforskydning af større værdier 1ULL<<62 ULL bruges til Unsigned Long Long, som er defineret ved hjælp af 64 bit, der kan lagre store værdier.
C
// c program to demonstrate the behaviour of bitwise> // shift operators for large values> #include> int> main()> {> > int> N = 3;> > // left shift of 65 digits> > printf> (> '3 << 65 = %d'> , (3 << 65));> > return> 0;> }> |
>
>
C++
// c++ program to demonstrate the behaviour of bitwise> // shift operators for large values> #include> using> namespace> std;> int> main()> {> > int> N = 3;> > // left shift by 65 digits> > cout <<> '3 << 65'> << (3 << 65) << endl;> > return> 0;> }> |
>
>Produktion
3 << 65 = 0>
3. Venstre-forskydningen med 1 og højre-forskydningen med 1 er ækvivalent med produktet af det første led og 2 til det givne potenselement(1<>3 = 1/pow(2,3)).
C
// C program for the above approach> #include> #include> int> main()> {> > printf> (> '2^5 using pow() function: %.0f
'> ,> pow> (2, 5));> > printf> (> '2^5 using left shift: %d
'> , (1 << 5));> > return> 0;> }> // This code is contributed Prince Kumar> |
>
en række objekter java
>
C++
// C++ program to get the shifted values using pow()> #include> #include> using> namespace> std;> int> main()> {> > cout <<> '2^5 using pow() function'> <<> pow> (2, 5) << endl;> > cout <<> '2^5 using leftshift'> << (1 << 5) << endl;> > return> 0;> }> |
>
>Produktion
2^5 using pow() function: 32 2^5 using left shift: 32>
Skal læses: Bitwise Operators i C/C++