Puedo especificar un literal entero de tipo unsigned long de la siguiente manera:

const unsigned long example = 9UL;

¿Cómo puedo hacer lo mismo para un unsigned char?

const unsigned char example = 9U?;

Esto es necesario para evitar advertencia del compilador:

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

Estoy con la esperanza de evitar detallado solución que tengo actualmente y no tener ‘unsigned char’ aparecen en la línea de llamada min sin declarar, 9 en una variable en una línea separada:

min(static_cast<unsigned char>(9), example2);
  • He cambiado tu pregunta ligeramente a lo que creo fue su intención. Cosas como 10 se llama «literales» en C++ (aunque se llama «constantes» en C). Es más común para C++ de la gente y evita la confusión con el de la declaración de «ejemplo».
InformationsquelleAutor WilliamKF | 2010-02-21

9 Comentarios

  1. 28

    C no proporciona una manera estándar para designar un entero constante con ancho menor que la de tipo int.

    Sin embargo, stdint.h proporcionar la UINT8_C() macro para hacer algo que es lo más cercano a lo que usted está buscando, ya que obtendrás en C.

    Pero la mayoría de la gente utiliza ningún sufijo (para obtener una int constante) o un U sufijo (para obtener una unsigned int constante). Ellos trabajan muy bien para char tamaño de los valores, y eso es todo lo que obtendrás de la stdint.h macro de todos modos.

    • Como de glibc 2.26, UINT8_C no darle un 8 bits entero: # define UINT8_C(c) c
  2. 36

    C++11 introducido definido por el usuario literales. Puede ser utilizado como esta:

    inline constexpr unsigned char operator "" _uchar( unsigned long long arg ) noexcept
    {
        return static_cast< unsigned char >( arg );
    }
    
    unsigned char answer()
    {
        return 42;
    }
    
    int main()
    {
        std::cout << std::min( 42, answer() );        //Compile time error!
        std::cout << std::min( 42_uchar, answer() );  //OK
    }
    • OP, hacen de este la aceptó respuesta ya! Aunque yo recomiendo usar sólo _uc, por la concisión, así como la paridad con el estándar ul y así sucesivamente.
  3. 20

    Puedes lanzar la constante. Por ejemplo:

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

    También puede utilizar el constructor de la sintaxis:

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

    El typedef no es necesario en todos los compiladores.

    • Creo que eres el único que descifra su muy secreto correctamente a la pregunta. En primer lugar, yo no averiguar bien lo que él realmente quería hacer.
    • A la derecha, que es mi actual trabajo, con esta pregunta me fue con la esperanza de evitar el elenco, pero parece que la respuesta es que no hay literal que me va a permitir evitar el elenco.
    • con el constructor de la sintaxis, ¿esto causa una asignación de objeto cada vez contrario a la literal?
    • Es un constructor de la sintaxis de un tipo primitivo, por lo que no debería ser ninguna sobrecarga.
    • Me gustaría escribir algo como esto (como el uint8_t typedef ha sido parte de la norma, ya que C++11): min(uint8_t{9}, example2);
  4. 11

    Si está utilizando Visual C++ y no tienen necesidad de interoperabilidad entre los compiladores, puede utilizar el ui8 sufijo en un número para convertirlo en una de 8 bits sin signo constante.

    min(9ui8, example2);

    Usted no puede hacer esto con real char constantes como ‘9’, aunque.

  5. 8

    Asumiendo que usted está utilizando std::min lo que realmente debe hacer es especificar explícitamente qué tipo min debe utilizar como tal

    unsigned char example2 = 0;
    min<unsigned char>(9, example2);
  6. 0

    Supongo '\0' sería un char literal con el valor 0, pero no veo el punto.

    • Esto no es unsigned char, pero signed char.
    • el tipo de '\0' en C++ no es ni signed char no unsigned char, es char como Axel dice. char es a diferencia de otros tipos integrales: signed int y int son del mismo tipo, pero signed char y char no lo son.
  7. 0

    Hay ningún sufijo para unsigned char tipos. Constantes enteras son int o long (signed o unsigned) y en C99 long long. Puede utilizar la llanura de ‘U’ sufijo sin preocuparte, siempre y cuando el valor está dentro del rango válido de caracteres sin signo.

  8. 0

    La cuestión era cómo «especificar un número entero ‘literal’ de tipo unsigned char en C++?». No se cómo declarar un identificador.

    Usted utilice el escape de barra diagonal inversa y dígitos octales apóstrofos. (por ejemplo. ‘\177’)

    El valor octal es siempre llevado a estar sin firmar.

    • No, no es llevado a estar sin firmar, todavía char — ni unsigned char ni signed char.

Dejar respuesta

Please enter your comment!
Please enter your name here