Форум сайта python.su
Для почти-гуманитаев, не знающих ни двоичной ни 16-й прочих систем (у меня 10 пальцев), объясните пожалуйста, почему:
In [18]: for i in xrange(5): 1 << 10*i
Out[18]: 1
Out[18]: 1024
Out[18]: 1048576
Out[18]: 1073741824
Out[18]: 1099511627776
Офлайн
cormorantНа самом деле что б понимать это не надо быть семи пядей во лбу, это очень просто. Если мы с 10 пальцами, привыкли умножать на 10, дописав нолик в конце (12*10 = 120), то в двоичной системе так же просто умножается на 2, при этом сама 2 в двоичной системе это b10, таким образом (b100011*b10 = b1000110). И если это проделать для 1:
Для почти-гуманитаев, не знающих ни двоичной ни 16-й прочих систем (у меня 10 пальцев), объясните пожалуйста, почему:
Офлайн
Получается eval(“1 << 10”) это двойка в 10-й степени. В цикле можно написать
for i in xrange(5): 2**(10*i)
Офлайн
cormorantТипа того, или даже для наглядности пример 3 (b11) и сдвинем влево на 10 бит: 3<<10 = 3*2^10 = 3072 (b110000000000)
Получается eval(“1 << 10”) это двойка в 10-й степени.
Отредактировано (Янв. 12, 2011 13:32:24)
Офлайн
вообще все еще проще, это сдвиг битов влево и вправо соответственно :)
Когда мы сдвигаем все биты влево на 1н:
было: 0 0 1 1
стало: 0 1 1 0
было: 0 0 1 1
стало: 0 0 0 1
Отредактировано (Янв. 12, 2011 11:03:48)
Офлайн