Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

cout<<(5<<3)<<endl;

#cpp


Почему при выводе:
   cout<<(5<<3); 
На экран выводится 40.
    


Ответы

Ответ 1



Потому, что эта запись означает. 1) Сдвинуть двоичную запись числа 5 на три разряда влево. 2) Вывести результат на экран Двоичная запись числа 5, это 101 Сдвигаем влево на три разряда 101000 = 40

Ответ 2



В языке C++ встроенная операция сдвига влево E1 << E2 для беззнаковых целых типов и положительных значений знаковых целых типов определяется через операцию умножения сдвигаемого значения на 2E2, Таким образом 5 << 3 по определению равно 5 * 8, то есть 40.

Ответ 3



Потому что << — это всего лишь функция с именем operator<<, которую можно перегружать как угодно и с какими угодно целями. Для int определена перегрузка вида int ::operator<<(int val, size_t offset), выполняющая побитовый сдвиг влево. Аналогичные перегрузки есть для всех встроенных числовых типов данных. std::ostream определяет свою перегрузку, std::ostream& std::ostream::operator<<(T val), выполняющую вывод строкового представления val в поток. Да, именно строкового, поскольку единственная задача istream и ostream — форматированный ввод/вывод. Для всего остального есть std::streambuf. Из всего вышесказанного можно сделать два вывода: Смысл перегрузки и типы аргументов и возвращаемого значения компилятору неважны и оставляются на усмотрение программиста. Единственное, что фиксировано — имя функции (operator<<) и количество аргументов (2). operator<< может быть не только функцией, но и методом класса. Тогда то, что находится слева от оператора, передаётся в качестве this.

Комментариев нет:

Отправить комментарий