у меня есть процедура маскирования (которая создает все-онов битовую маску для нижней части для заданного размера):Битовые маски и долго-долго
template<class T>
T bottom_half() {
T halfway = ((sizeof(T) * 8)/2);
T mask = (1 << halfway) - 1;
return mask;
}
, который прекрасно работает, если я позвоню bottom_half<int>()
или long
или char
. Но по какой-то причине, когда я запускаю его с long long
, halfway
правильно установлен на 32
, но mask
- 0
. Почему это так?
Правильное написание половины битов целого числа: 'std :: numeric_limits :: цифры/2'. Выражение, используемое выше, предполагает, что 'char' имеет 8 бит, что требуется (хотя я не знаю ни одной платформы, где это не 8 бит). –
А, это интересно узнать, спасибо. – sircodesalot
@ DietmarKühl: Я слышал, что Windows CE имеет байты с 16 бит в нем. – Nawaz