#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. Ах да. Большое вам спасибо. Это было то, что я искал. 🙂