Форум программистов, компьютерный форум CyberForum.ru

Поразрядные операторы сдвига - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка http://www.cyberforum.ru/cpp-beginners/thread345744.html
Объясните в чем проблема (выдает ошибку) "вычисление объема методом Монте-Карло" #include<iostream> #include<windows.h> #include<cmath> using namespace std; int main() { //Чисо пи const double pi=3.1415; //Рабочие переменные программы
C++ Использование *& Помогите пожалуйста! На форуме не нашёл ответа.. объясните следующую строку void func1(class1*&) class class2 { class2(); ~class2(); void func1(class1*&);//что означает class1*& } http://www.cyberforum.ru/cpp-beginners/thread345726.html
C++ WinAPI LSTATUS WinApi
привет товарищи. есть такая строка LSTATUS retVal = ERROR_SUCCESS; Подскажите где почитать LSTATUS. что это и с чем едят. В поиске применение нашел, а описание - нет.
C++ Псевдографика
Мне нужно консольное псевдографическое приложение. Функции вроде printf и std::cout выводят информацию с новой строчки. А можно как нибудь в C++ переписать какую нибудь из уже выведеных? Например после выполнения такого кода: printf("1 строка"); printf("2 строка"); printf("3 строка"); могу я во второй строке заменить несколько букв без очистки экрана и "рисования" заново?
C++ Неудается добавить в автозагрузку! http://www.cyberforum.ru/cpp-beginners/thread345667.html
Привет всем! Такая проблема. Пытаюсь средствами С++ добавить прогу в автозагрузку, в итоге не получается, выдает код ошибки 87, смотрел по winerror - это ERROR_INVALID_PARAMETER. В чем проблема? Вроде, все правильно делаю... Вот исходник HKEY hKey = HKEY_LOCAL_MACHINE; TCHAR *sKey = (TCHAR *)"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; LONG a = RegCreateKeyEx(hKey, ...
C++ Ввести с клавиатуры предложение. Удалить из него все буквы о, стоящие на нечетных местах. Ввести с клавиатуры предложение. Удалить из него все буквы о, стоящие на нечетных местах. подробнее

Показать сообщение отдельно
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 11:03     Поразрядные операторы сдвига
Всем хорошо известно, что поразрядные операторы сдвига >> и << сдвигают все биты переменной вправо или влево. Во время сдвига битов в один конец числа, другой конец заполняется нулями (ограничимся рассмотрением переменных без знака). Данные сдвиги не являются циклическими.

Так вот столкнулся с ситуацией, что если n - количество разрядов переменной, например x, то
x << (n - 1 + i) == x << i,
где 0 < i < n. Например,

unsigned long x;
x = 1 << 32; ( == 1 << 1)
x = 1 << 33; ( == 1 << 2)

Казалось бы, что переменная x во всех случаях должна быть равна 0, но нет, совсем нет.
Кто-нибудь знает почему это так и где это прописано? Можно написать формулу:
unsigned long x = 1 << n; (== 1 << (n % (sizeof(x)*8)));

Со сдвигом вправо таких странностей нет.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru