Переписать оператор битового сдвига C в Python

#python #c #shift

#python #c #сдвиг

Вопрос:

У меня есть этот код на C :

 #include <iostream>

using namespace std;

int main()
{
    unsigned char v1;
    v1 = 23 << 6;
    cout << "v1: " << (int)v1;

    return 0;
}
 

Когда я его выполняю, он дает мне результат 192.
Но когда я делаю то же самое (23 << 6) в Python, я получаю 1472 вместо 192.
Что я здесь делаю не так? Знаете ли вы какой-либо способ переписать эту операцию сдвига битов 1: 1 в Python?

Ответ №1:

23 << 6 выполняется как an int в C , но присвоение его обратно an unsigned char сокращает его до размера в битах (8 на любой платформе, где работает Python). Итак, чтобы получить то же значение в Python, вам нужно сделать (23 << 6) amp; 0xFF .

С другой стороны, чтобы получить «правильный» (не усеченный) результат в C , просто назначьте его unsigned int вместо an unsigned char (это работает, если int достаточно велико для результата, в противном случае вам нужно сначала преобразовать один операнд во что-то большее; у Python нет таких проблем, поскольку он используетцелые числа произвольного размера).

Комментарии:

1. Ах да. Большое вам спасибо. Это было то, что я искал. 🙂