Форум программистов, компьютерный форум CyberForum.ru

Оператор == - C++

Восстановить пароль Регистрация
 
Karchok
2 / 2 / 1
Регистрация: 27.09.2011
Сообщений: 48
25.06.2013, 17:03     Оператор == #1
C++
1
2
3
char ch = 255;
    if(ch==255)
        cout<<"Hello!";
Почему условие выдаёт false? Понятно что ch в данном случае равно -1 из-за переполнения, но если сравнивать побитово то эти выражения равны! Почему так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 17:03     Оператор ==
Посмотрите здесь:

оператор For C++
C++ Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. C++
C++ Оператор break как оператор go to next
C++ Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 17:04     Оператор == #2
char хранит числа от -128 до 127 и == не оператор, а операция
FireProoF
17 / 17 / 1
Регистрация: 28.10.2012
Сообщений: 190
25.06.2013, 17:05     Оператор == #3
char ch = "255";
if(ch=="255")
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:07     Оператор == #4
C++
1
2
3
unsigned char ch = 255;
      if(ch == 255)
        cout<<"Hello!";
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
25.06.2013, 17:07     Оператор == #5
Цитата Сообщение от FireProoF Посмотреть сообщение
char ch = "255";
if(ch=="255")
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.06.2013, 17:08     Оператор == #6
Цитата Сообщение от Thinker Посмотреть сообщение
char хранит числа от -128 до 127
Зависит от реализации. Может быть и 0..255.
Цитата Сообщение от Thinker Посмотреть сообщение
== не оператор, а операция
а как же перегрузка оператора?
C++
1
operator==
Karchok
2 / 2 / 1
Регистрация: 27.09.2011
Сообщений: 48
25.06.2013, 17:09  [ТС]     Оператор == #7
И что теперь? побитово если сравнивать, то одно и то же получается!
http://msdn.microsoft.com/ru-ru/library/x04xhy0h.aspx
открой ссылочку на все операторы с++
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 17:10     Оператор == #8
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
operator==
и все же это операция сравнения. перегрузка, хм... не знаю почему
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.06.2013, 17:13     Оператор == #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
@coloc, с двойными компилятор ругнется. Намного интереснее будет с одинарными кавычками:
C++
1
char c = '255';
Добавлено через 2 минуты
@Thinker, с вики:
Английское слово operator, соответствующее термину «операция», иногда ошибочно переводят как «оператор». На самом деле (по историческим причинам) русский термин «оператор» обозначает то же, что и «инструкция», которой соответствует английское statement[1]. Путаница усугубилась тем, что в C присваивание и инкремент/декремент являются и операторами, и операциями.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:17     Оператор == #10
Цитата Сообщение от Karchok Посмотреть сообщение
побитово если сравнивать, то одно и то же получается!
char знаковый, поэтому единица старшего разряда трактуется как знак числа.
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
25.06.2013, 17:19     Оператор == #11
есть предположение что в ch у тебя -1, потому что тип char он знаковый, а ты сравниваешь с 255, как ты понимаешь побитово они могут быть и равны, а вот значения разные.

unsigned должен решить твою проблему
Karchok
2 / 2 / 1
Регистрация: 27.09.2011
Сообщений: 48
25.06.2013, 17:22  [ТС]     Оператор == #12
А вообще как идёт сравнение? Оба выражения, слева и справа, преобразовываются в int или как? Понятно что char знаковый, но выражение справа можно тоже интерпретировать как знаковое и тогда будет -1. Вообще все целочисленные константы какой тип имеют по умолчанию?

Добавлено через 1 минуту
Цитата Сообщение от el_gato_de_Ch Посмотреть сообщение
unsigned должен решить твою проблему
Это да
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:28     Оператор == #13
Цитата Сообщение от Karchok Посмотреть сообщение
но выражение справа можно тоже интерпретировать как знаковое
С какой стати? 255 - это целое положительное, и никак иначе.
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,650
Записей в блоге: 1
25.06.2013, 17:29     Оператор == #14
C++
1
2
3
char ch = 255;
    if((unsigned char)ch==255)  cout<<"Hello!"; // так сработает
    if(ch==(char)255)  cout<<"Hello!"; // и так сработает
В выражении ch==255 оба значения приводятся к целому (ch к -1, а 255 остается 255)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:31     Оператор == #15
Цитата Сообщение от Karchok Посмотреть сообщение
Вообще все целочисленные константы какой тип имеют по умолчанию?
int.
Karchok
2 / 2 / 1
Регистрация: 27.09.2011
Сообщений: 48
25.06.2013, 17:32  [ТС]     Оператор == #16
Цитата Сообщение от zer0mail Посмотреть сообщение
В выражении ch==255 оба значения приводятся к целому (ch к -1, а 255 остается 255)
т.е. к int?
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,650
Записей в блоге: 1
25.06.2013, 17:34     Оператор == #17
Конечно
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.06.2013, 18:10     Оператор == #18
Цитата Сообщение от alsav22 Посмотреть сообщение
char знаковый
char может быть как знаковый, так и беззнаковый. Зависит от реализации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 18:11     Оператор ==
Еще ссылки по теме:

C++ В Delphi есть оператор cost i of. и т.д. Есть ли в C++ такой же оператор?
C++ Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 18:11     Оператор == #19
Цитата Сообщение от Tulosba Посмотреть сообщение
char может быть как знаковый, так и беззнаковый. Зависит от реализации.
Зависит. У ТС знаковый.
Yandex
Объявления
25.06.2013, 18:11     Оператор ==
Ответ Создать тему
Опции темы

Текущее время: 17:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru