Почему при выводе:
cout<<(5<<3);
На экран выводится 40.
Потому, что эта запись означает.
1) Сдвинуть двоичную запись числа 5 на три разряда влево.
2) Вывести результат на экран
Двоичная запись числа 5, это 101 Сдвигаем влево на три разряда 101000 = 40
В языке C++ встроенная операция сдвига влево E1 << E2
для беззнаковых целых типов и положительных значений знаковых целых типов определяется через операцию умножения сдвигаемого значения на 2E2, Таким образом 5 << 3
по определению равно 5 * 8
, то есть 40
.
Потому что <<
— это всего лишь функция с именем 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
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Есть Python скрипт имеющий путь к файлу, необходимо открыть этот файл в С/С++ функции, провести с ним манипуляции и вернуть результат в Python скрипт
Зачем в начале скрипта пишут var app = app || {}; ? Ссылка на весь файл
Доброго веремени суток, возникла проблема с использование плагина, вот его настройка