Простой способ рассчитать целые степени 2 в C #? - PullRequest
12 голосов
/ 01 апреля 2011

Я уверен, что это не так сложно, как я это представляю.

Хотелось бы использовать что-то эквивалентное Math.Pow(double, double), но вывести целое число. Я обеспокоен ошибками округления с плавающей точкой.

Лучшее, что я могу придумать:

uint myPower = 12;
uint myPowerOfTwo = (uint)Math.Pow(2.0, (double)myPower);

Я думал об этом:

uint myPowerOfTwo = 1 << myPower;    // doesn't work

но я получаю ошибку, что оператор "<<" нельзя использовать с операндами типа int <strike>или и uint.

Есть предложения? Спасибо как всегда.

Ответы [ 2 ]

28 голосов
/ 01 апреля 2011

вам придется использовать целое число со знаком для второго операнда (правая часть) оператора сдвига:

int myPower = 12;
int myPowerOfTwo = 1 << myPower;   

Конечно, вы можете привести результат к другому числовому типу, такому как uint:

uint myPowerOfTwo = (uint) (1 << myPower);   

С MSDN :

Оператор сдвига влево (<<) сдвигает его первый операнд, оставленный числом битов, указанных его вторым операнд. <strong>Тип второго операнда должен быть int .

2 голосов
/ 01 апреля 2011

Если вы сделаете метод расширения / статический метод, тогда будет легче найти и исправить любые ошибки позже, и оптимизатор все равно его встроит:

public static uint Exp2(this uint exponent) {
    return (uint)Math.Pow(2.0, (double)exponent);
}

Тогда вы можете использовать как:

uint myPowerOfTwo = myPower.Exp2();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...