Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2012, 17:50   #1
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию Необычный оператор присвания и результат

Всем привет! Ребята, подскажите по такому вопросу.
Есть такой код:

int k=(1,010);

cout << k;

Выводится почему-то 8, не пойму почему.
Если бы было бы int k=(1.010); вывелось бы 1, это мне понятно, что идет преобразование double к int.

Заранее спасибо!
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 29.02.2012, 17:53   #2
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Символ запятой нельзя использовать как разделитель целой и десятичной части цифры, это писанное правило. Как я понял - программа просто выдает своего рода ошибку.
Kamilius вне форума Ответить с цитированием
Старый 29.02.2012, 17:58   #3
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Согласен полностью.НО!!!

Попробуйте следующий код.
int x=(1.010);

int y;

y=1,010;

cout<<x+y;

Ответ будет 2
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 29.02.2012, 18:00   #4
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Или вот так:
int x=(1,010);

int y;

y=1,010;

cout<<x+y;
ответ 9

Бред какой-то
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 29.02.2012, 18:02   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Kamilius
ошибку выдал только ты

2Стремящийся
в операторе "запятая" операнды вычисляются слева направо, итоговый результат - самый правый операнд. самый правый операнд у тебя константный числовой литерал 010. если литерал начинается с нуля, значит он задается в восьмеричной системе счисления, а oct(10) = dec(8).
(т.к ты поставил скобки --> выполняется сначала оператор ,)

и тебе уже сказали, не используй запятую для представления действительного числа. да и тип ты неверный указал

Код:
double x = 3.14;
double y = 1.2;
cout << x + y << endl;
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 29.02.2012 в 18:07.
pproger вне форума Ответить с цитированием
Старый 29.02.2012, 18:03   #6
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Стремящийся Посмотреть сообщение
Бред какой-то
Который с легкостью решается присвоением нужного типа данных
Правила для того и правила, чтоб их придерживаться
Kamilius вне форума Ответить с цитированием
Старый 29.02.2012, 18:05   #7
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Kamilius
ошибку выдал только ты
Прошу простить, я тоже только учусь И даже не знал о существовании оператора "запятая". И следующая часть:

Цитата:
Сообщение от pproger Посмотреть сообщение
2Стремящийся
в операторе "запятая" операнды вычисляются слева направо, итоговый результат - самый правый операнд. самый правый операнд у тебя константный числовой литерал 010. если литерал начинается с нуля, значит он задается в восьмеричной системе счисления, а oct(10) = dec(8)
Помогла узнать кое-что новое
Kamilius вне форума Ответить с цитированием
Старый 29.02.2012, 18:05   #8
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

А почему тогда в последнем варианте 9, а не 16, исходя из Ваших слов?
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 29.02.2012, 18:09   #9
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

Цитата:
Сообщение от Стремящийся Посмотреть сообщение
Или вот так:
int x=(1,010);

int y;

y=1,010;

cout<<x+y;
ответ 9

Бред какой-то
9 потому что
1. x = 8, ибо стоят скобки.
2. y = 1, ибо скобок нет, а приоритет у операции присваивания выше, чем у оператора запятая.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 29.02.2012, 18:12   #10
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Стремящийся Посмотреть сообщение
А почему тогда в последнем варианте 9, а не 16, исходя из Ваших слов?
Или вот так:
Код:
int x=(1,010); // результатом является 8, если учитывать то что написал ранее pproger.

int y;

y=1,010; - здесь же y = 1, поскольку это int и все что после запятой просто отбрасывается.

cout<<x+y;
ответ 9 // x=8, y=1, x+y=9 - логично? :)

Последний раз редактировалось Kamilius; 29.02.2012 в 18:14. Причина: неверно написал значиние y
Kamilius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль: необычный цикл proser93 Помощь студентам 10 27.10.2011 20:28
необычный счетчик grom333 Помощь студентам 4 26.05.2011 21:31
Необычный спам mutabor Свободное общение 3 05.02.2010 23:44
Немного необычный поиск в TMemo RIO Общие вопросы Delphi 8 30.07.2009 02:12
необычный ProgressBar andrey4623 Общие вопросы Delphi 3 27.12.2007 19:25