Почему я не получаю в ответе 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;
}
C/C++
Математические Операции в С++
<< - это побитовый сдвиг влево
ты получаешь 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;
}
ты получаешь 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;
}
Макар Скиба
О спасибо, а можно же использовать else if много раз? для * и / ?
Макар Скиба
Всё заработало, еще один вопрос, я ввел + получил 10, а как сделать так чтобы код на этом не заканчивался, а чтобы я мог еще раз написать - там или *
Я так понимаю, что ты пытаешься сложить переменные a и b и поместить результат в I.
Тогда писать надо так: int l = a + b;
А в данном случае происходит операция << для типов int и char. Происходит неявное преобразование char в int и выполняется операция a << g (побитовый сдвиг влево).
Затем аналогичная операция применяется и c b
Тогда писать надо так: int l = a + b;
А в данном случае происходит операция << для типов int и char. Происходит неявное преобразование char в int и выполняется операция a << g (побитовый сдвиг влево).
Затем аналогичная операция применяется и c b
Между прочим, <iostream> позволяет ввести арифметическое выражение, главное — считать его правильно.
cin << a << g << b;
будет работать правильно, даже если между введенными значениями не будет пробелов!
cin << a << g << b;
будет работать правильно, даже если между введенными значениями не будет пробелов!
int a = 4;//a=4
int b = 6;//b=6
char g = '+';//g=43
int l = a << g << b;//l=524288
cout << l << endl;
int b = 6;//b=6
char g = '+';//g=43
int l = a << g << b;//l=524288
cout << l << endl;
ты передаешь целому типу символьный тип, от чего происходит неявное преобразование и выходит тотальная каша
Так не проще сделать???
#include
using namespace std;
int main()
{
setlocale(0, "");
int a = 4;
int b = 6;
int l = a + b;
cout << a << " + " << b << " = " << l << endl;
}
#include
using namespace std;
int main()
{
setlocale(0, "");
int a = 4;
int b = 6;
int l = a + b;
cout << a << " + " << b << " = " << l << endl;
}
Макар Скиба
я не хочу чтобы было только +, хочу чтобы при запуске кода ты нажал на + или - или / или *, и код дал результат
Похожие вопросы
- Перевести математическое уравнение в С
- Окей, все по новой. Что же на самом деле означает операция разыменования? C++
- C++ побитовые операции
- При совершении арифметических операций с переданными в рекурсивную функцию переменными, переменные меняются(Си)
- Никак не могу понять применение операции NEW и DELETE.
- Для чего в логических операциях применяют дополнительный ~0 логический ноль?
- Язык С++ : есть ли разница между этими двумя операциями? 1) int m = (int)n; 2) int m = int(n).
- Обработка переполнения в операциях с целыми типами данных в языке С.
- Ошибка (активно) E0511 для этой операции с перечисляемым типом требуется соответствующая
- В чем разница между математической операцией и математической формулой ?