C/C++

Математические Операции в С++

Почему я не получаю в ответе 10? а получаю какие-то цифры? вот код.

=========================================================

#include <iostream>

using namespace std;

int main()
{
setlocale(0, "");


int a = 4;
int b = 6;
char g = '+';
int l = a << g << b;
cout << l << endl;
}
<< - это побитовый сдвиг влево
ты получаешь l = a * 2 ^ (g * 2 ^ b), где g = 43 (см. таблицу ascii)
тут явно получается переполнение, но вообще говоря, << - это числовая операция
просто она перегружена для потоковых объектов вывода (cout и товарищи)

перегрузка операторов - это более поздняя тема, пока достаточно будет знать, что в c++ нет eval-а, и то, что ты пытаешься сделать, можно сделать только как-то так:
if (g == '+') {
l = a + b;
} else if (g == '-') {
l = a - b;
} else if (...) {
...
} else {
cout << "fail" << std::endl;
return 1;
}
Mike Migen
Mike Migen
36 960
Лучший ответ
Макар Скиба О спасибо, а можно же использовать else if много раз? для * и / ?
Макар Скиба Всё заработало, еще один вопрос, я ввел + получил 10, а как сделать так чтобы код на этом не заканчивался, а чтобы я мог еще раз написать - там или *
Я так понимаю, что ты пытаешься сложить переменные a и b и поместить результат в I.
Тогда писать надо так: int l = a + b;
А в данном случае происходит операция << для типов int и char. Происходит неявное преобразование char в int и выполняется операция a << g (побитовый сдвиг влево).
Затем аналогичная операция применяется и c b
Невский Юрист
Невский Юрист
17 671
Между прочим, <iostream> позволяет ввести арифметическое выражение, главное — считать его правильно.

cin << a << g << b;

будет работать правильно, даже если между введенными значениями не будет пробелов!
СС
Сергй Сергй
16 172
int a = 4;//a=4
int b = 6;//b=6
char g = '+';//g=43
int l = a << g << b;//l=524288
cout << l << endl;
Сергей Клыжин
Сергей Клыжин
13 286
ты передаешь целому типу символьный тип, от чего происходит неявное преобразование и выходит тотальная каша
Так не проще сделать???
#include
using namespace std;
int main()
{
setlocale(0, "");

int a = 4;
int b = 6;
int l = a + b;
cout << a << " + " << b << " = " << l << endl;
}
Макар Скиба я не хочу чтобы было только +, хочу чтобы при запуске кода ты нажал на + или - или / или *, и код дал результат