Los temas relacionados con char, unsigned char y la comparación literal

Recientemente hacer un proyecto, se define una matriz de caracteres, que almacenan los mensajes enviados por otros. encabezado del mensaje definido es 0xff0xff, así que después de recibo el mensaje se compara con 0xff, sólo para encontrar ningún igual. Leer alguna información, o encontrar su comprensión de los conceptos básicos que no están en su lugar.

En primer lugar, he escrito un código de programa de prueba y resultados de operación son los siguientes:

test_num void ()
 {
    char a = 0x01;
    Char b = 0xfe;
    unsigned char c = 0xfe;
    printf ( "a =% 02x \ n", a);
    printf ( "b =% 02x \ n", b);
    printf ( "c =% 02x \ n", c);
    printf ( "Fe =% 02x \ n", 0xfe);
    printf ( "(char) Fe =% 02x \ n", (char) 0xfe);
    printf ( "- 1 =% 02x \ n", - 1);
    si (a == 0x01)
        cout << "a == 0x01" << endl;
    si (b == 0xfe)
        cout << "b == 0xfe" << endl;
    si (b == (char) 0xfe)
        cout << "b == (char) 0xfe" << endl;
    si (c == 0xfe)
        cout << "c == 0xfe" << endl;
    Si (255 == 0xff)
        cout << "255 == 0xff" << endl;
    si (-1 == 0xff)
        tribunal << "- 1 == 0xff" << endl;
    si (-1 == 0xFFFFFFFF)
        cout << "- 1 == 0xFFFFFFFF" << endl;
 }

resultados de la ejecución son las siguientes:

Análisis: imprimir 02x impresión es un int, y ahora estamos pasando el tipo de carbón, por lo que en primer lugar no es la conversión de tipos. char es 8 bits, el sistema más int de 32 bits, primero es necesario complementar los datos de 24 bits. ¿Qué es que los datos deben hacerlo, de hecho, es mirar a las circunstancias positivas y negativas de esta variable, y luego llenar 0 positivo, negativo complemento 1. La referencia específica

https://blog.csdn.net/qq_39165336/article/details/78383239, este artículo lleva a cabo una prueba detallada.

== juicio más tarde, mientras que el tipo char, mientras que los literales. Eso es lo que la constante literal que escriba? Por los documentos pertinentes que las constantes literales son int, unsigned int, largo, sin firma mucho, mucho tiempo, unsigned long long valor pequeño. Así que el primer pocos son carbón de leña y se comparan int, que se refiere al tipo de conversión acaba de decir. Por último, una constante literal es unsigned int, char es necesario para convertir la unsigned int, un bit de signo extendido después de entenderse como un número positivo, de hecho, es de módulo. La demostración final de que son iguales.

Por último, dice, si queremos salvar una cadena, se puede definir una matriz de caracteres, si lo que desea es abrir una memoria para guardar algunos datos binarios, se define mejor como unsigned char.

Publicado 12 artículos originales · ganado elogios 4 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/wuzhidefeng/article/details/82905010
Recomendado
Clasificación