Разрядный Взлом - Округляет до нескольких из 8

Я раньше использовал NUnit, но теперь имел тенденцию использовать MbUnit для двух основных характеристик: 1. Функция RowTest позволяет Вам легко запускать тот же тест на различных наборах параметров, который важен, если Вы действительно хотите полное покрытие. 2. Функция отката позволяет Вам запускать тесты против своей базы данных при откате изменений после каждого теста, удержании базы данных точно то же состояние каждый раз. И это столь же легко как добавление [Откат] атрибут.

Другой хороший аспект MbUnit - то, что его синтаксис почти идентичен NUnit, поэтому если у Вас уже есть целый испытательный стенд на месте под NUnit, можно ли просто выключить ссылки без потребности изменить кого-либо (очень?) код.

9
задан user212721 19 November 2009 в 21:22
поделиться

7 ответов

Что ж, если бы вы пытались округлить в меньшую сторону , вам не нужно было бы прибавление. Простое выполнение шага маскирования очистит нижние биты, и вы будете округлены до следующего меньшего кратного.

Если вы хотите округлить до , сначала вам нужно добавить достаточно, чтобы «пройти» следующее кратное 8. Затем на том же этапе маскирования вы вернетесь к кратному 8. Причина вы выбираете 7, потому что это единственное число, которое гарантированно будет «достаточно большим», чтобы вы могли перейти от любого числа к следующему кратному 8, не увеличивая лишнее кратное, если ваше исходное число уже было кратным 8.

In В общем, округлить до степени двойки:

unsigned int roundTo(unsigned int value, unsigned int roundTo)
{
    return (value + (roundTo - 1)) & ~(roundTo - 1);
}
17
ответ дан 4 December 2019 в 06:14
поделиться

Фактически это прибавление 7 к числу и округление в меньшую сторону .

Это дает желаемый эффект округление до следующего кратного 8. (Добавление +8 вместо +7 приведет к увеличению числа с 8 до 16.)

16
ответ дан 4 December 2019 в 06:14
поделиться

+7 не дает точного кратного 8, это ' s, чтобы убедиться, что вы получите следующее по величине кратное 8.

правка: Превышено на 16 секунд и несколько порядков качества. Ну что ж, вернемся к скрыванию.

4
ответ дан 4 December 2019 в 06:14
поделиться

Ну, маска сама по себе произвела бы точное кратное 8. Добавление 7 к asz гарантирует, что вы получите следующее большее кратное.

3
ответ дан 4 December 2019 в 06:14
поделиться

Без +7 это будет наибольшее кратное 8, меньшее или равное вашему исходному числу

1
ответ дан 4 December 2019 в 06:14
поделиться

При сложении 7 не получается число, кратное 8. Кратное 8 получается путем сложения с ~ 7. ~ 7 является дополнением к 7, что составляет 0xffff fff8 (за исключением использования того, сколько битов находится в int). Это усекает или округляет в меньшую сторону.

Добавление 7 перед этим гарантирует, что не будет возвращено значение ниже asz. Вы уже выяснили, как это работает.

1
ответ дан 4 December 2019 в 06:14
поделиться

Эээ, вы только что ответили на свой вопрос ??? добавляя 7, вы гарантируете, что результат будет равен следующему кратному 8 или превзойдет его, а затем при усечении вы получите это кратное.

0
ответ дан 4 December 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: