Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Karchok
2 / 2 / 1
Регистрация: 27.09.2011
Сообщений: 48
#1

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

25.06.2013, 17:03. Просмотров 556. Ответов 18
Метки нет (Все метки)

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

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки - C++
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 - C++
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 ...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости - C++
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области видимости.

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->? - C++
#include &lt;iostream&gt; using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. - C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

18
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 17:04 #2
char хранит числа от -128 до 127 и == не оператор, а операция
0
FireProoF
17 / 17 / 1
Регистрация: 28.10.2012
Сообщений: 193
25.06.2013, 17:05 #3
char ch = "255";
if(ch=="255")
0
alsav22
5426 / 4821 / 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!";
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
25.06.2013, 17:07 #5
Цитата Сообщение от FireProoF Посмотреть сообщение
char ch = "255";
if(ch=="255")
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.06.2013, 17:08 #6
Цитата Сообщение от Thinker Посмотреть сообщение
char хранит числа от -128 до 127
Зависит от реализации. Может быть и 0..255.
Цитата Сообщение от Thinker Посмотреть сообщение
== не оператор, а операция
а как же перегрузка оператора?
C++
1
operator==
0
Karchok
2 / 2 / 1
Регистрация: 27.09.2011
Сообщений: 48
25.06.2013, 17:09  [ТС] #7
И что теперь? побитово если сравнивать, то одно и то же получается!
http://msdn.microsoft.com/ru-ru/library/x04xhy0h.aspx
открой ссылочку на все операторы с++
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 17:10 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
operator==
и все же это операция сравнения. перегрузка, хм... не знаю почему
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.06.2013, 17:13 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
@coloc, с двойными компилятор ругнется. Намного интереснее будет с одинарными кавычками:
C++
1
char c = '255';
Добавлено через 2 минуты
@Thinker, с вики:
Английское слово operator, соответствующее термину «операция», иногда ошибочно переводят как «оператор». На самом деле (по историческим причинам) русский термин «оператор» обозначает то же, что и «инструкция», которой соответствует английское statement[1]. Путаница усугубилась тем, что в C присваивание и инкремент/декремент являются и операторами, и операциями.
3
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:17 #10
Цитата Сообщение от Karchok Посмотреть сообщение
побитово если сравнивать, то одно и то же получается!
char знаковый, поэтому единица старшего разряда трактуется как знак числа.
0
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
25.06.2013, 17:19 #11
есть предположение что в ch у тебя -1, потому что тип char он знаковый, а ты сравниваешь с 255, как ты понимаешь побитово они могут быть и равны, а вот значения разные.

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

Добавлено через 1 минуту
Цитата Сообщение от el_gato_de_Ch Посмотреть сообщение
unsigned должен решить твою проблему
Это да
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:28 #13
Цитата Сообщение от Karchok Посмотреть сообщение
но выражение справа можно тоже интерпретировать как знаковое
С какой стати? 255 - это целое положительное, и никак иначе.
1
zer0mail
2373 / 2003 / 199
Регистрация: 03.07.2012
Сообщений: 7,191
Записей в блоге: 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)
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 17:31 #15
Цитата Сообщение от Karchok Посмотреть сообщение
Вообще все целочисленные константы какой тип имеют по умолчанию?
int.
1
25.06.2013, 17:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 17:31
Привет! Вот еще темы с ответами:

Оператор break как оператор go to next - C++
Подскажите, в этом примере break эквивалентна действию оператора go to next?

Как перегрузить оператор<< и оператор>> ? - C++
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

В Delphi есть оператор cost i of. и т.д. Есть ли в C++ такой же оператор? - C++
(C++ Builder XE5)

оператор do while - C++
задание следующее: нужно найти произведение n чисел, но используя оператор do while. Я более-менее изучил его основы и элементарные...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru