Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588

Численный аналог char

02.12.2015, 10:51. Показов 3644. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
То есть выделяемая память та же, но использовать его можно без преобразования, как int допустим.

пример:
C++
1
2
char ch = 5;
cout<<ch;// выводит ср*нь
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2015, 10:51
Ответы с готовыми решениями:

Резервирование памяти для char db (я так понимаю аналог dw)
Вот db резервирует для строки, но db - это два байта как я понимаю. Но здесь больше, чем 2а байта. Что не так? .386 .model flat,...

Методы Char.IsLower Char.IsUpper Char.IsDigit
Доброго времени суток, месяц назад сделал задание: С помощью перебора всех символов строки, введенной в текстовое поле, вычислите...

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор не посылает куда подальше. Нет он конечно...

28
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2015, 17:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zss Посмотреть сообщение
Увидите заглавную A
Зависит от кодировки.
Цитата Сообщение от Байт Посмотреть сообщение
Но cout сам себе на уме, как заметил daslex.
Что просят, то и выводит. В printf явно формат надо указывать, а operator<< имеет перегрузки для разных типов (какая будет вызвана определяет уже компилятор, а не пользователь на основании формата), хочешь выводить как число, будь любезен приведи к нужному типу, чтобы была выбрана правильная перегрузка.

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
разве вот это корректно?


Вполне. Можно считать это то же самое, что сделать явный си-каст к int'у.
Цитата Сообщение от nmcf Посмотреть сообщение
printf определён с многоточием
Он парсит строку параметров и интерпретирует аргументы в соответствии с этой строкой. См. va_arg, va_list и т.п.
Цитата Сообщение от nmcf Посмотреть сообщение
для чего тогда предусмотрены %hhd, %hd, %ld, %lld?
Как раз таки для соответствующих преобразований соответствующих аргументов.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.12.2015, 17:14
Tulosba, т. е. это просто побочный эффект внутренней совместимости форматов? Это "переносимо"? В стандарте такое поведение оговорено?
И всё таки зачем нужен %hhd, если char и так работает с %d?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2015, 17:26
Цитата Сообщение от nmcf Посмотреть сообщение
Это "переносимо"?
Переносимо ровно настолько насколько переносим сишный каст.
Цитата Сообщение от nmcf Посмотреть сообщение
зачем нужен %hhd, если char и так работает с %d?

http://www.cplusplus.com/reference/cstdio/printf/
Note regarding the c specifier: it takes an int (or wint_t) as argument, but performs the proper conversion to a char value (or a wchar_t) before formatting it for output.
Как ты можешь видеть из таблицы, %hhd будет интерпретировать аргумент как signed char, т.е. может быть разница в выводе для целого аргумента. Пример:
C++
1
2
3
4
5
6
7
#include <cstdio>
int main()
{
    int c = 1000;
    printf("%d\n", c); // 1000
    printf("%hhd\n", c); // -24
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.12.2015, 17:47
Это мне понятно, что int обрезается до char. А вот на основании чего char расширяется до int?

И ещё, если уже заговорили о printf(): она не различает float. Тем не менее float выводится с %f для double. Как это получается? Они ведь разного размера - 4/8?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
02.12.2015, 19:01
Цитата Сообщение от nmcf Посмотреть сообщение
Где описано, что char корректно преобразуется в int этой функцией
В стандарте.
5.2.2/7
The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are performed on the argument expression. An argument that has (possibly cv-qualified) type std::nullptr_t is converted to type void* (4.10). After these conversions, if the argument does not have arithmetic, enumeration, pointer, pointer to member, or class type, the program is ill-formed. Passing a potentially-evaluated argument of class type (Clause 9) having a nontrivial copy constructor, a non-trivial move constructor, or a non-trivial destructor, with no corresponding parameter, is conditionally-supported with implementation-defined semantics. If the argument has integral or enumeration type that is subject to the integral promotions (4.5), or a floating point type that is subject
to the floating point promotion (4.6), the value of the argument is converted to the promoted type before the call.
Вот здесь более человеческим языком, чтобы не скакать по стандарту:
http://en.cppreference.com/w/c... _arguments

Цитата Сообщение от nmcf Посмотреть сообщение
для чего тогда предусмотрены %hhd, %hd, %ld, %lld?
Для различных вариантов интерпретации.

Добавлено через 3 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
она не различает float
Это по той же причине. Преобразование аргументов.
Цитата Сообщение от nmcf Посмотреть сообщение
Как это получается? Они ведь разного размера - 4/8?
Считал double из параметра, а вывел как float. Что здесь странного?
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2015, 19:14
nmcf, printf парсит строку формата и на основании ее получается набор разнотипных параметров, которые он ожидает увидеть после строки формата.
Далее этот набор извлекается через всякие va_arg и тут главное (но не достаточное), как мне кажется, соблюсти размеры аргумента.
Т.е. скажем, я указал в формате %lld (long long int), а передал 42 (int), в итоге получил UB:
C
1
2
3
4
#include <stdio.h>
int main() {
    printf( "%lld\n", 42 );
}
-4637770505867231190
Можешь проверить, что от запуска к запуску оно дает разные результаты. Т.е. типичная ситуация при UB.
В данном примере мы вышли за границы int'а (4 байта), и считали 8 байт (long long int), т.е. по сути, мусор.

Возможна и обратная ситуация (но тоже приводящая к UB):
C
1
2
3
4
#include <stdio.h>
int main() {
    printf( "%d %d %d\n", 42ll, 100500, 1234 );
}
42 0 100500
Надеюсь, результаты сможешь сам объяснить.

Кстати, мой пример в предыдущем сообщении тоже приводит к UB.

Теперь, возвращаемся к char-int. В Стандарте C99 про форматы printf сказано (7.19.6.1/8):
The conversion specifiers and their meanings are:
d,i The int argument is converted to signed decimal in the style ...
...
c If no l length modifier is present, the int argument is converted to an
unsigned char, and the resulting character is written.
Т.е. что при %c, что при %d аргумент ожидается и извлекается int'овый, даже когда его фактический тип char. Т.о. легально писать:
C
1
2
char c = 65;
printf("%d\n", c);
Тут нет UB, т.к. размеры получатся согласованные (ибо char на основании integer promotions для функций с элипсисом (6.5.2.2/7) продвигается до int'а). Ну а дальше, вывод в нужном формате:
d - выводит число (полученное из char, преобразованного в int), c - выводит символ (полученный из char, преобразованного в int, интерпретированного обратно как char).
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.12.2015, 20:30
DrOffset, т. е. по-русски говоря компилятор принудительно конвертирует float в double в функциях с многоточием?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2015, 20:41
nmcf, только для аргументов, попадающих в это многоточие. Т.к. может быть и явный аргумент, т.е. до многоточия.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.12.2015, 20:42
Tulosba, я это и имел в виду.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2015, 20:42

char* to char или (char* запись в файл)
Привет всем! Вопрос: Как можно перевести char* в char или записать даные в файл с char*? Пробовал так: char *szBuffer =...

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что &quot;char *concat(char *,...)&quot;: невозможно преобразовать аргумент 1 из &quot;const char &quot;...

CONST_RETURN char *__cdecl strstr (const char *_Str, const char *_SubStr)
#include &lt;stdio.h&gt; #include &lt;string.h&gt; char tracks = { &quot;ya ostavil svoe serdce v harvardskom med univere&quot;, &quot;NewYork New York...

Численный оптимизатор
Дайте ссылку на скачивание программы, несколькими численными методами ищущую оптимум и позволяющую выбирать метод оптимизации, размерность...

Численный интеграл
Здравствуйте. Я, конечно, понимаю, что с лыжами все в порядке, но никак не получается взять вот такую ерунду....


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru