Вопрос действительно в названии; Я уверен, что есть что-то логичное, но пока я в тупике!
Почему побитовые сдвиги (<< и >>) используются для cout и cin?
Ответ 1
Согласно §8.3.1 Проекта и Эволюции C++:
Идея предоставления оператора вывода вместо именованной функции вывода была предложена Дугом Макилрой по аналогии с операторами перенаправления ввода-вывода в оболочке UNIX (>, >>, | и т.д.)
[...]
Несколько операторов были рассмотрены для операций ввода и вывода: "Оператор присваивания был кандидатом для ввода и вывода, но он связывает неправильный путь. То есть
cout=a=bбудет интерпретироваться какcout=(a=b), и казалось, что большинство людей предпочитают, чтобы оператор ввода отличался от оператора вывода. Операторы<и>были опробованы, но значения "меньше" и "больше чем" были настолько прочно внедрены в сознание людей, что новые операторы ввода/вывода были для всех практических целей нечитаемыми (похоже, что это не так для << и >>). Кроме того, '<' чуть выше ',' на большинстве клавиатур, и люди писали такие выражения:cout < x , y, z;Нелегко давать хорошие сообщения об ошибках для этого.
Ответ 2
Может быть, потому, что он похож на операцию добавления Unix, поскольку вы по существу добавляете поток ввода/вывода?
например.
Выход
 echo "foo" >> barкод > 
Ввод
 sendmail -f [email protected] << myemail.txt
(Пример ввода строки из Zac Howland)
Ответ 3
От "Язык программирования С++". Слова Страуструпа (авторы языка):
Перегрузка оператора
<<на значение '' put to дает лучшую нотацию и позволяет программисту выводить последовательность объектов в одном выражении.Но почему
<<? Невозможно придумать новый лексический токен. Оператор присваивания был кандидатом для ввода и вывода, но большинство людей предпочитали использовать разные операторы для ввода и вывода. Кроме того, = связывает неправильный путь; то есть cout = a = b означает cout = (a = b), а не (cout = a) = b. Я попробовал операторы<и>, но среднее значение "меньше" и "больше" было настолько прочно имплантировано в сознание людей, что новые операторы ввода-вывода были для всех практических целей нечитаемыми.
Ответ 4
 >> и << являются просто операторами, и вы можете реализовать свои собственные >> и << для своих классов.
Я предполагаю, что "кто-то" выбрал их, потому что: а) они похожи на операции с файлами оболочки и б) повторно использовать существующие операторы, потому что нет необходимости создавать новые
Ответ 5
Потому что они имели более или менее разумный приоритет и выглядели хорошо. В C++ вы не можете создавать новые операторы или изменять их приоритеты или правила группировки, вы можете только перегружать существующих и изменять то, что они на самом деле делают.
 Выбор << и >> имеет некоторый неприятный побочный эффект, потому что он каким-то образом выдвигает идею о том, что вывод будет выполнен с соблюдением порядка. Хотя это верно для фактического результата благодаря умному трюку с цепочкой, оно ложно для вычислений, и это очень часто удивляет.
Чтобы быть более конкретным письмом
std::cout << foo() << bar() << std::eol;
  НЕ подразумевает, что foo будет вызываться перед bar.
РЕДАКТИРОВАТЬ
 С C++ 17 проблема последовательности была "исправлена". Теперь порядок оценки указан слева направо для операторов << и >>. В C++ все еще есть места, где порядок оценки не определен (или даже отсутствует, что означает, что оценка может чередоваться), но несколько распространенных случаев теперь ведут себя предсказуемым и переносимым способом, чтобы увидеть этот ответ.
Ответ 6
Итак, вы помните, что если вы думаете, что cin в качестве клавиатуры и cout в качестве монитора, то, что вы вводите, переходит в переменную
cin>>var;
Или содержимое вашей переменной переходит к экрану
cout<<var;
		Ответ 7
Они не являются побитовыми операторами, в этом контексте они называются операторами вставки и извлечения.
http://www.cplusplus.com/doc/tutorial/basic_io/
Они используются только для визуальной интерпретации. Если вы изучаете разработку собственного потока и перегрузки оператора, то вы можете видеть, что вы можете использовать + для ввода и - для вывода:)
Ответ 8
Этот ответ неудовлетворительный, но правильный: они не являются побитовыми операторами.
Значение оператора определяется типом данных, который появляется слева. В случае cin и cout (и других типов потоков) < и → операторы перемещают значения в потоки и из них. В случае, когда левый операнд является целым числом, операция представляет собой поразрядную операцию, которую вы уже знаете из C.
Значение оператора не фиксировано, хотя его приоритет.
Ответ 9
В основном из-за их ассоциативности. Операторы вставки и извлечения связываются слева направо, поэтому
std::cout << "Hello" << ' ' << 4 << 2;
оценивается так, как вы ожидали: сначала с "Hello", затем с ' ' и, наконец, с 4 и 2. Разумеется, оператор сложения operator+ также связывается слева направо. Но этот оператор и другие с левой-правой ассоциативностью уже имеют другое значение.
Ответ 10
Бьярне выбрал их для практического приоритета, ассоциативности и мнемонической ценности.
Приоритет не является совершенным, например. операторы boolean и bit-level являются трудными.
Но это довольно нормально.
Ответ 11
Оператор вставки >> и << используются с входным потоком и выходным потоком соответственно, потому что входной поток
означает поток данных в вашу программу, а выходной поток - поток данных из вашей программы.
Поскольку эти операторы вставки выглядят как Направленный оператор (Отображение направления потока данных),
поэтому для входного потока выбирается >> и << для выходного потока.
Посмотрите на часть кода...
int Num1;
cin >> Num1;
здесь, если вы внимательно наблюдаете >> показывает поток данных в переменную (объявленную в программе)
это означает поток данных в программу, который является заданием входного потока (здесь cin).
аналогично идет с cout,
int Num2 = 5;
cout << Num2;
Здесь <<, показывающий поток данных из программы (поскольку Num2 является частью программы), который является заданием выходного потока.
Я надеюсь, что все это имеет смысл для вас.
Ответ 12
cout << "Output sentence"; // prints Output sentence on screen
cout << 120;               // prints number 120 on screen
cout << x;                 // prints the content of x on screen 
< < оператор вводит данные, которые следуют за ним в поток, предшествующий ему. В приведенных выше примерах он вставлял константу string Output, числовую константу 120 и переменную x в стандартный выходной поток cout.
Стандартным устройством ввода обычно является клавиатура. Обработка стандартного ввода в С++ выполняется путем применения перегруженного оператора извлечения ( → ) в потоке cin. За оператором должна следовать переменная, которая будет хранить данные, которые будут извлечены из потока. Например:
int age;
cin >> age;
		Ответ 13
Я предполагаю, что вы знаете, что С++ допускает перегрузку оператора. В общем случае вы перегружаете операторы только в том случае, если семантика полностью переносима (например, перегрузка добавления для векторного класса для добавления двух векторов вместе). Я думаю, что ваш вопрос относится к тому, почему можно использовать операторы с битрейтом, перегрузить их для iostream и дать им совершенно иное значение, чем их первоначальная цель. Причина, по которой это может быть сделано, состоит в том, что операции бит-сдвига настолько удалены от того, что делают iostreams, и никто не может быть смущен, чтобы думать, что < или → делает битрейт на iostream. И причина, по которой они удобны в использовании, также заключается в том, что их порядок состоит в том, чтобы сначала оценить операнд слева, затем тот, который находится справа, и выполнить операцию. Это соответствует тому, что вы хотели бы сделать, когда вы используете операторы для добавления или извлечения материала из iostream.
Но, к первоначальному вопросу, почему? Я действительно не знаю, мне просто кажется, что < и → довольно легко понимаются как получение информации от одного объекта и помещение его в другое. Почему причина должна быть более сложной? Понятно использовать их, потому что их смысл очевиден. Что лучше спросить у оператора?