преобразование char в int - что здесь происходит?

0

Я хочу преобразовать значение char в int. Я играю со следующими фрагментами кода:

#include <iostream>
using namespace std;

int main() {
    char a = 'A';
    int i = (int)a;
    //cout<<i<<endl; OUTPUT is 65 (True)

    char b = '18';
    int j = b;
    //cout<<j<<endl; OUTPUT is 56 (HOW?)

    char c = 18;
    int k = c;
    //cout<<c<<endl; OUTPUT is empty
    //cout<<k<<endl; OUTPUT is 18 (Is this a valid conversion?)

    return 0;
}

Я хочу третье преобразование, и я получил правильный результат, т.е. 18. Но является ли это правильной конверсией? Может кто-нибудь объяснить приведенные выше результаты и их стратегии?

Теги:
type-conversion
int
char

2 ответа

3
Лучший ответ
char a = 'A';
int i = (int)a;

Бросок не нужен. Присвоение или инициализация объекта числового типа значением любого другого числового типа вызывает неявное преобразование.

Значение, хранящееся в i представляет собой значение, которое ваша реализация использует для представления символа 'A'. Почти во всех системах в наши дни (за исключением некоторых мэйнфреймов IBM и, возможно, нескольких других) это значение составит 65.

char b = '18';
int j = b;

Литеральный символ с более чем одним символом имеет тип int и имеет значение, определенное реализацией. Вероятно, что значение будет '1'<<8+'8' и что преобразование из char в int '1'<<8+'8' старших бит, оставив '8' или 56. Но многосимвольные литералы - это то, чего следует избегать. (Это не относится к escape-последовательностям, таким как '\n', хотя между одинарными кавычками есть два символа, он представляет одно знаковое значение.)

char c = 18;
int k = c;

char - целочисленный тип; он может легко удерживать целое значение 18. Преобразование этого значения в int просто сохраняет значение. Таким образом, оба c и k являются целыми переменными, значение которых равно 18. Печать k использованием

std::cout << k << "\n";

будет печатать 18, но печать c с использованием:

std::cout << c << "\n";

будет печатать непечатаемый управляющий символ (это, случается, Control-R).

1
char b = '18';
int j = b;

b, в этом случае символ "18" не имеет очень последовательного значения и имеет поведение, зависящее от реализации. В вашем случае он, похоже, переводится в значение ascii 56 (что эквивалентно тому, что вы получите от char b = '8').

char c = 18;
int k = c;

c хранит значение символа 18, и оно совершенно верно для преобразования в int. Однако он может не отображаться очень сильно, если вы показываете его как символ. Это непечатаемый управляющий символ.

  • 0
    Спасибо, если c содержит символьное значение 18, выводя его пустым, почему?
  • 3
    Нет, '18' имеет тип int и имеет значение, определяемое реализацией. Это значение преобразуется из int в char , что может int к потере информации.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню