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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Snaiffer
2 / 2 / 0
Регистрация: 13.03.2011
Сообщений: 18
#1

Кто объяснит почему true == false ? - C++

16.03.2011, 11:52. Просмотров 1102. Ответов 5
Метки нет (Все метки)

Спасайте! а то я щас повешусь от взрыва мозга!

Кто объяснит вот что это за фигня.
Когда я в программе пишу:
C++
1
2
3
char a = 0x64;
char b = 0x9B;
short int getted_check_sum = a*0x100+b;
она мне выдает результат "getted_check_sum =0x639B"

А когда
C++
1
getted_check_sum = 0x64*0x100+0x9B;
результат "getted_check_sum =0x649B" Т.е. тот который по логике и должен быть!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2011, 11:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кто объяснит почему true == false ? (C++):

Почему не меняется true/false? - C++
Добрый день! Написал простенькую программу с перегрузкой типов. 24 часовая система переводится в 12 часовую (с pm/am). У меня не...

[C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя? - C++
Заметил такую странность: Это проходит компиляцию bool *b = false; А это нет bool *b = true; error: cannot convert ‘bool’ to...

Глюк false = true == true; - C++
Возник глюк, пишу: result.isPlus = this->isPlus == numberBigSize.isPlus; Поля "this->isPlus" и "numberBigSize.isPlus" равны true, но...

Непонятная ошибка, кто объяснит? - C++
Наткнулся на непонятную ошибку. Раньше код компилировался, теперь выдает ошибку. Для примера приведу небольшой тестовый вариант. ...

true and false - C++
Уважаемые, программисты! Помогите, пожалуйста, с программой. Написать программу, которая печатает True или False в зависимости от...

False,True - C++
Помогите пожалуйста. Составить программу, печатающую TRUE, если указанное высказывание является истинным, и FALSE в противном случае. ...

5
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
16.03.2011, 12:15 #2
C++
1
2
3
4
5
6
7
8
9
#include <cstdio>
 
int main()
{
unsigned char a = 0x64;
unsigned char b = 0x9B;
short getted_check_sum = a*0x100+b;
printf( "%x", getted_check_sum );
}
1
Snaiffer
2 / 2 / 0
Регистрация: 13.03.2011
Сообщений: 18
16.03.2011, 12:52  [ТС] #3
Спасибо, но не могли бы объяснить почему так?
Это получается что b было отрицательным? и вообще зачем символьному типу отрицательные значения?
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
16.03.2011, 13:50 #4
Цитата Сообщение от Snaiffer Посмотреть сообщение
Это получается что b было отрицательным? и вообще зачем символьному типу отрицательные значения?
такова уж особенность, что в стандарте не определено какие значения может принимать char
-128 ... 127 или 0 ... 255
смысл, ну думаю в стародавнии времена когда память исчислялась килобайтами char использовали наравне с остальными типами для простых вычислений
1
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,200
Записей в блоге: 27
16.03.2011, 17:21 #5
alex_x_x, всё-таки конкретно в данном случае следовало бы объяснить тем, что char - знаковый. Если в char присвоить 0x9b, то старший (знаковый) бит равен единице, а потому величина будет отрицательная. Когда пишешь a*0x100+b, то имеем такой раскалад, что a и b - char'ы, а константа 0x100 имеет тип int (по стандарту константа без каких-либо модификаторов является int'ом). В результате чего a и b предварительно конвертируются в int (после чего действительно начинает играть роль то, что b - отрицательное).

Выражения "0x64*0x100+0x9B" и "a*0x100+b" НЕ эквивалентны. В нашем случае правильно было бы писать ( ((char)0x64) * 0x100 ) + ((char)0x9b) тогда ты получишь эквивалентное выражение
1
easybudda
16.03.2011, 17:35     Кто объяснит почему true == false ?
  #6

Не по теме:

Цитата Сообщение от Snaiffer Посмотреть сообщение
я щас повешусь от взрыва мозга!
Доктор Плейшнер в пятый раз выпрыгивал из окна, но яд всё не действовал. (с)

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2011, 17:35
Привет! Вот еще темы с ответами:

вывод true и false - C++
Доброгов сем времени суток. Хотелось бы попросить помощи в решении этого задания, под цифрой 2, справа. треугольник у меня получился...

С++. вывод true/false - C++
помогите пожалуйста, почему не робит прога. должна вывести 1 если символ введеный с клавы гласная буква русского алфавита, иначе 0. ...

Задача на true or false - C++
You have the implement a function, with the following signature: ABCheck(str). The argument str is of type string. The function...

Еще один глюк. На этот раз с printf. Объяснит мне кто-нибудь в чем прикол??? - C++
Вот кусок текста: Dir = Dir_X + Dir_Y; printf(&quot;X%d,&quot;,dX); printf(&quot;%s &quot;,Xs); ...


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

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

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