Сравнивая два типа данных в C ++? - PullRequest
0 голосов
/ 13 февраля 2019

Размер INT равен 4 байтов, CHAR равен 1 байт.

Предел INT составляет -2 147 483 648 до 2 147 483 647 , CHAR составляет -128 до 127.

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    char b;
    a = 66000; 
    b = 'C';
    if (b == a)
    std::cout << "1";
    else
    std::cout << "2";     
}

Вывод вышеуказанной функции:

2

Здесь мои сомнения имеют разные пределы и размеры.

  • Как можно сравнить два разных типа данных?Я искал в Google, я не нашел удовлетворительного ответа.
  • Это проблема компилятора или что-то, что я пропустил, чтобы прочитать?
  • b == a, a == b подпадают ли они под одну категорию сравнения?потому что в случае b == a (сравнение символа с int), в случае a == b (это наоборот)
  • В случае a значение равно 67, этовыдавая вывод как

1

1 Ответ

0 голосов
/ 13 февраля 2019

Их типы автоматически (неявно) преобразуются, а затем сравниваются.https://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/

Короче говоря,

Если операндом является целое число, которое уже int, он подвергается интегральному продвижению (как описано выше) к int или unsigned int.

Если операнды по-прежнему не совпадают, компилятор находит операнд с наивысшим приоритетом и неявно преобразует другой операнд в соответствие.

EDIT :

b == a, a == b подпадают ли они под одну категорию сравнения?потому что в случае b == a (сравнение символов с int), в случае a == b (это наоборот)

Да, они одинаковы.Независимо от их позиции, char должен быть повышен до int типа.Если больший конвертируется в меньший тип, есть шанс потерять его ценность.Такой маленький должен быть повышен до большего типа.

...