I notice that I can do things like `2 << 5`

to get 64 and `1000 >> 2`

to get 250.

Also I can use `>>`

in `print`

:

```
print >>obj, "Hello world"
```

What is happening here?

Skip to content
# What do >> and

# example

# update:

### 2 << 5 (shift to left)

### 1000 >> 2 (shift to right)

Each Answer to this Q is separated by one/two green lines.

I notice that I can do things like `2 << 5`

to get 64 and `1000 >> 2`

to get 250.

Also I can use `>>`

in `print`

:

```
print >>obj, "Hello world"
```

What is happening here?

I think it is important question and it is not answered yet (the OP seems to already know about shift operators). Let me try to answer, the >> operator in your example is used for two different purposes. In c++ terms this operator is overloaded. In the first example it is used as bitwise operator (left shift), while in the second scenario it is merely used as output redirection. i.e.

```
2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj,
```

```
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
```

In python 3 it is possible to give the file argument directly as follows:

```
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
```

These are bitwise shift operators.

Quoting from the docs:

```
x << y
```

Returns `x`

with the bits shifted to the left by y places (and new bits on the right-hand-side are zeros). This is the same as multiplying `x`

by `2**y`

.

```
x >> y
```

Returns `x`

with the bits shifted to the right by y places. This is the same as dividing `x`

by `2**y`

.

12 << 2

48

Actual binary value of 12 is “00 1100” when we execute the above statement Left shift ( 2 places shifted left) returns the value 48 its binary value is “11 0000”.

48 >> 2

12

The binary value of 48 is “11 0000”, after executing above statement Right shift ( 2 places shifted right) returns the value 12 its binary value is “00 1100”.

They are bit shift operator which exists in many mainstream programming languages, `<<`

is the left shift and `>>`

is the right shift, they can be demonstrated as the following table, assume an integer only take 1 byte in memory.

```
| operate | bit value | octal value | description |
| ------- | --------- | ----------- | -------------------------------------------------------- |
| | 00000100 | 4 | |
| 4 << 2 | 00010000 | 16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100 | 4 | move all bits to right 2 bits, filled with 0 at the left |
```

`print >>obj, "Hello World"`

is the “print chevron” syntax for the `print`

**statement** in Python 2 (removed in Python 3, replaced by the `file`

argument of the `print()`

**function**). Instead of writing to standard output, the output is passed to the `obj.write()`

method. A typical example would be file objects having a `write()`

method. See the answer to a more recent question: Double greater-than sign in Python.

These are the shift operators

x << y Returns x with the bits shifted to the left by y places (and

new bits on the right-hand-side are zeros). This is the same as

multiplying x by 2**y.x >> y Returns x with the bits shifted to the

right by y places. This is the same as //’ing x by 2**y.

Are “bitwise” operators.

https://wiki.python.org/moin/BitwiseOperators

```
>>> help("symbols")
+-------------------------------------------------+---------------------------------------+
| Operator | Description |
|=================================================|=======================================|
| "<<", ">>" | Shifts |
+-------------------------------------------------+---------------------------------------+
| "&" | Bitwise AND |
+-------------------------------------------------+---------------------------------------+
| "|" | Bitwise OR |
+-------------------------------------------------+---------------------------------------+
| "~x" | bitwise NOT |
+-----------------------------------------------------------------------------------------+
| "^" | Bitwise XOR |
+-------------------------------------------------+---------------------------------------+
```

`x << y `

Returns x with the bits shifted to the left by y places (and new bits on the right-hand-side are zeros). This is the same as multiplying x by 2**y.

`x >> y `

Returns x with the bits shifted to the right by y places. This is the same as //’ing x by 2**y.

PD:In python 3.9 the operator” | “Applied to dictionaries merges dictionaries.

https://docs.python.org/3.9/whatsnew/3.9.html

```
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
```

Shifting 2 (in binary) 5 bits to the left. (inject zero to the right)

```
bin(16) # '0b10'
shifted = bin(2) + '0' * 5 # '0b1000000'
int(shifted, 2) # 64
2 << 5 # 64
```

Shifting 1000 (in binary) 2 bits to the right. (inject zero to the left)

```
bin(1000) # '0b1111101000'
# add 00 to the left and remove last digit from the right
# '0b 00(add these bits) 11111010 00(remove these bits)'
shifted = '0b0011111010'
int(shifted, 2) # 250
1000 >> 2 # 250
```

```
<< Mean any given number will be multiply by 2the power
for exp:- 2<<2=2*2'1=4
6<<2'4=6*2*2*2*2*2=64
```

I verified the following on both Python 2.7 and Python 3.8

I did print(100<<3)

Converting 100 to Binary gives 1100100.

What I did is I droped the first 3 bits and added 3 bits with the value ‘0’ at the end.

So it should result as 0100000, and I converted this to Decimal and the answer was 32.

For my suprise when I executed print(100<<3) the answer was 800. I was puzzled.

I converted 800 to Binary to check whats going on.

And this is what I got 1100100000.

If you see how 800 was Python answer, they did not shift or drop the first 3 bits but they added value ‘0’ to last 3 bits.

Where as print(100>>3) , worked perfect. I did manual calculation and cheked the print result from python. It worked correctly. Dropped last 3 bits and added value ‘0’ to first 3 bits.

Looks like (100<<3) , left shift operator has a bug on Python.

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .