Подтвердить что ты не робот

Использование char для малого целого (С++)

Я читал, что для малых целых чисел можно использовать "char". Однако, когда я пытаюсь,

unsigned char A = 4;
std::cout << A << std::endl;

он дает символ, а не 4.

4b9b3361

Ответ 1

То, что вы испытываете, - это последствия перегрузки оператора. Оператор << предполагает, что вы, скорее всего, захотите напечатать символ, когда передаете ему переменную типа char, поэтому она ведет себя иначе, чем вы ожидали бы от нее для интегральных переменных.

Как предложено Vivek Goel, вы можете заставить компилятор выбрать перегрузку, которую вы действительно хотите:

unsigned char A = 4;
std::cout << static_cast<unsigned int>(A) << std::endl;

Приложение: если вы не работаете с средой с сильно ограниченными ресурсами (особенно маленькая память), вы оптимизируете ее с неправильным концом. Операции на unsigned int обычно быстрее, чем на unsigned char, потому что ваш процессор не может извлекать одиночные байты, но должен получить как минимум кратное 4 и маскировать остальные 3 байта.

Ответ 2

Существует перегрузка operator<< для std::ostream и (signed/unsigned) char, которая выполняет вывод символов; чтобы вывести целочисленное значение символа, вам необходимо выполнить бросок:

std::cout << (int)A << std::endl;

Однако это то, что называется "старомодным" (более конкретно, C-стиль). У С++ есть более операционные операторы, которые проще искать и обычно предпочитают:

std::cout << static_cast<int>(A) << std::endl;

Но это громоздко печатать; идиоматической альтернативой является использование оператора +, который продвигает свой аргумент в (unsigned) int:

std::cout << +A << std::endl;

Это то, что вы должны использовать.

Ответ 3

Это должно быть

 unsigned char A = 4;
    std::cout << (int)A << std::endl;

Ответ 4

A char IS небольшое целое число (с диапазоном от -127 до +127) и оно подвергается той же целочисленной арифметике, что и целые числа.

Проблема здесь заключается в смешивании концепций между внутренним представлением (двоичным числом, представляющим диапазон от -127 до +127) с внешним, что обычно делает входные и выходные функции отображаемыми как "глиф чей ASCII-код - это число, на которое оно выполнено", тогда как для integer внешнее представление представляет собой "последовательность символов, которая читается как целое число, представленное в десятичной форме"

Самый простой способ распечатать его как число, преобразовать его в int непосредственно перед передачей его функции вывода (например, cout << int(ch) или любой эквивалентной формы преобразования)

Ответ 5

Для отдельных объектов увеличение размера кода, вероятно, приведет к уменьшению размера хранилища, любого из них (для выравнивания может потребоваться память, следующая за объектом). Используйте int, если вам не нужен большой массив небольших целых чисел.