Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Приоритет и очередность вычислений |
Автор: FiMa1 11.4.2007, 12:51 | ||
Согласно Керниган, Ритчи, рассчитываю на очередность (см. код ниже): 1. Выражение в скобках, где выполняется (а) ~0 (б) UINT32SIZE - n (в) сдвиг 2. Сдвиг результата от действий в скобках на p. Помогите, плз, разобраться где я наврал...
Пробовал также вариант uint32 m = (~0 >> 32 - n) << p; чтобы не учитывать операторы макроса для UINT32SIZE... |
Автор: ama_kid 11.4.2007, 14:34 |
что-то я не совсем понял, что тебе надо... Чтобы нерабочий вариант работал так же как рабочий? ну сделай приведение типа 0 явно: uint32 m = (~(uint32)0 >> (UINT32SIZE - n)) << p; Или я не о том? |
Автор: FiMa1 11.4.2007, 14:39 | ||||
Все так, спасибо. А без явного приведения никак? Почему у Кернигана с Ритчи прокатывает вариант:
|
Автор: SerpentVV 12.4.2007, 09:24 |
Скорее всего потому, что они писали про язык С, а ты компилируешь в С++. А С и С++ - две большие разницы... |
Автор: FiMa1 12.4.2007, 15:47 | ||||||
Ответ - нет.. Все варианты (и Ритчи и мои) компилировались в MS Visual Studio .NET 2003, проекты заводились как С++. Вариант Керниганf&Ритчи работает согласно задумке:
В моём же варианте непорядок... |
Автор: vinter 12.4.2007, 16:15 |
ответ понятен? |