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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2013, 10:33   #21
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Выше Somebody привел алгоритм преобразований. Если он верен, почему так происходит:
Код:
#include <iostream>

using namespace std;

int main()
{
     
    { // Сравнение char и uchar
        signed char s = -1;
        unsigned char u = 1;
        cout << (s > u)  << endl;       // cout: 0
    }

     // Сравнение int и uint
    signed int s = -1;
    unsigned int u = 1;
    cout << (s > u)  << endl;     // cout: 1

    return 0;
}
В двух случаях s должна была преобразоваться в unsigned и результат сравнения == true.
220Volt вне форума Ответить с цитированием
Старый 12.10.2013, 10:55   #22
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

По теме (ранг целого числа):
Цитата:
4.13 Integer conversion rank [conv.rank]
1 Every integer type has an integer conversion rank defined as follows:
— No two signed integer types other than char and signed char (if char is signed) shall have the same
rank, even if they have the same representation.
— The rank of a signed integer type shall be greater than the rank of any signed integer type with a
smaller size.
— The rank of long long int shall be greater than the rank of long int, which shall be greater than
the rank of int, which shall be greater than the rank of short int, which shall be greater than the
rank of signed char.
— The rank of any unsigned integer type shall equal the rank of the corresponding signed integer type.
— The rank of any standard integer type shall be greater than the rank of any extended integer type
with the same size.
— The rank of char shall equal the rank of signed char and unsigned char.
— The rank of bool shall be less than the rank of all other standard integer types.
— The ranks of char16_t, char32_t, and wchar_t shall equal the ranks of their underlying types (3.9.1).
— The rank of any extended signed integer type relative to another extended signed integer type with
the same size is implementation-defined, but still subject to the other rules for determining the integer
conversion rank.
— For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has greater rank than T3,
then T1 shall have greater rank than T3.
[ Note: The integer conversion rank is used in the definition of the integral promotions (4.5) and the
usual arithmetic conversions (Clause 5). —end note ]
220Volt вне форума Ответить с цитированием
Старый 12.10.2013, 11:14   #23
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Всю тему перечитывать лень, по данному примеру резюмирую:

При неявном приведении типов возможно "неожиданное" поведение. Если не понимаете как оно работает (или просто не хотите забивать себе голову) делайте явное приведение типов и не ной-те что язык странный, а компилятор говно.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 12.10.2013, 11:26   #24
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Всю тему перечитывать лень, по данному примеру резюмирую:

При неявном приведении типов возможно "неожиданное" поведение. Если не понимаете как оно работает (или просто не хотите забивать себе голову) делайте явное приведение типов и не ной-те что язык странный, а компилятор говно.
Странное резюме, я как раз пытаюсь понять правила по которым происходит приведение, чтобы понять где возможны сюрпризы, а где все будет гладко. Если Вам лень прочитать хотя бы крайние посты, зачем писать? Мы друг друга не поймем.
220Volt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
warning C4018: '<' : signed/unsigned mismatch ? Тёма_) Visual C++ 2 24.07.2012 19:33
Для типов данных char, short, int, long с квалификаторами signed, unsigned составить программу, которая, listiksasha Фриланс 4 21.02.2011 12:26
Для типов данных char, short, int, long с квалификаторами signed, unsigned составить программу, которая, listiksasha Помощь студентам 2 20.02.2011 12:57
Comparing signed and unsigned types - widened both operands Человек_Борща Общие вопросы Delphi 4 09.01.2011 14:59