std::cout genera datos de tipo char sin firmar

Al escribir código C++, puede encontrar que es normal generar tipos como char, float, int y double, pero a veces se generan caracteres ilegibles cuando se encuentran caracteres sin firmar.
Así que pruébalo tú mismo:

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 255;
	//unsigned char u = (unsigned char)(h);

	unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

La salida es normal:
inserte la descripción de la imagen aquí

El carácter sin firmar generalmente está entre 0 y 255, cuando damos un valor en la forma de asignación:

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 255;
	unsigned char u = (unsigned char)(h);

	//unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

El resultado resultante es un valor basura:
inserte la descripción de la imagen aquí
no funcionará porque aquí u (caracter sin firmar) es un carácter sin firmar (con valor 255), cout en realidad imprimirá algún valor basura (o nada) ya que es solo un carácter ASCII no imprimible que se está imprimiendo de todos modos. Tenga en cuenta que el carácter ASCII correspondiente a 255 no es imprimible. Consulte aquí para ver la tabla ASCII.
PD: Puede verificar si u es imprimible o no usando isprint () como
lo anterior significa: cuando se da, esto excede el rango ASCII está agotado, por lo que no se puede imprimir o es un valor basura.

Prueba final:
cuando a u se le da un valor normal normal, 97 corresponde a 'a', y la salida es 'a'. Los resultados de la prueba son los siguientes:
Código de prueba:

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 97;
	unsigned char u = (unsigned char)(h);

	//unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

Resultados de la prueba
inserte la descripción de la imagen aquí
Por lo tanto, cuando std::cout no puede salir, puede usar la conversión forzada a int, y cout está bien.
el código se muestra a continuación:

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 255;
	unsigned char u = (unsigned char)(h);

	//unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << (int)u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

Resultados de la prueba:
inserte la descripción de la imagen aquí
consulte los siguientes materiales:
https://www.it1352.com/457126.html

Supongo que te gusta

Origin blog.csdn.net/weixin_43851636/article/details/110552887
Recomendado
Clasificación