Как я определяю целочисленный литерал типа неподписанный символ в C++?

Я могу определить целочисленный литерал типа, неподписанного длинный следующим образом:

const unsigned long example = 9UL;

Как я делаю аналогично для неподписанного символа?

const unsigned char example = 9U?;

Это необходимо для предотвращения предупреждения компилятора:

unsigned char example2 = 0;
...
min(9U?, example2);

Я надеюсь избежать подробного обходного решения, я в настоящее время имею и не имею 'неподписанный символ', появляются в минуту вызова строки, не объявляя 9 в переменной на отдельной строке:

min(static_cast<unsigned char>(9), example2);
46
задан WilliamKF 21 February 2010 в 16:10
поделиться

6 ответов

C не предоставляет стандартного способа обозначения целочисленной константы с шириной меньше, чем у типа int.

Однако, stdint.h предоставляет макрос UINT8_C(), чтобы сделать что-то, что очень близко к тому, что вы ищете, насколько это возможно в C.

Но большинство людей просто используют либо отсутствие суффикса (для получения константы int), либо суффикс U (для получения константы unsigned int). Они отлично работают для значений размера char, и это практически все, что вы получите от макроса stdint.h в любом случае.

28
ответ дан 26 November 2019 в 20:14
поделиться

Вы можете привести константу. Например:

min(static_cast<unsigned char>(9), example2);

Вы также можете использовать синтаксис конструктора:

typedef unsigned char uchar;
min(uchar(9), example2);

Типедеф требуется не во всех компиляторах.

20
ответ дан 26 November 2019 в 20:14
поделиться

Просто const unsigned char example = 0; подойдет.

4
ответ дан 26 November 2019 в 20:14
поделиться

Я предполагаю, что '\ 0' будет символьным литералом со значением 0, но я тоже не вижу в этом смысла.

0
ответ дан 26 November 2019 в 20:14
поделиться

Для типов беззнаковых символов нет суффикса. Целочисленные константы имеют вид int или long ( подписанный или беззнаковый ), а в C99 long long . Вы можете без проблем использовать простой суффикс «U», если значение находится в допустимом диапазоне беззнаковых символов.

0
ответ дан 26 November 2019 в 20:14
поделиться

Предполагая, что вы используете std :: min , вы должны явно указать, какой тип min должен быть используя как таковые

unsigned char example2 = 0;
min<unsigned char>(9, example2);
8
ответ дан 26 November 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: