unsigned int y int contacto sin signo con variables diferenciadas -C / C ++ base programa (V)

Ejemplos de análisis

#include<iostream>
#include <stdio.h>

struct Result
{
	char c;
	char d;
	unsigned char e;
};

Result getChar(int x, int y)
{
	Result res;
	unsigned int a = x;
	(a + y > 10) ? (res.c = 1) : (res.c = 2);
	res.d = a + y;
	res.e = a + y;
	return res;
};

int main()
{
	Result res1;
	res1 = getChar(7, 4);
	printf("c1:%d\n", res1.c);
	printf("d1:%d\n", res1.d);
	printf("e1:%d\n", res1.e);

	printf("---------------------\n");

	Result res2;
	res2 = getChar(7, 3);
	printf("c2:%d\n", res2.c);
	printf("d2:%d\n", res2.d);
	printf("e2:%d\n", res2.e);

	printf("---------------------\n");

	Result res3;
	res3 = getChar(7, -7);
	printf("c3:%d\n", res3.c);
	printf("d3:%d\n", res3.d);
	printf("e3:%d\n", res3.e);

	printf("---------------------\n");

	Result res4;
	res4 = getChar(7, -10);
	printf("c4:%d\n", res4.c);
	printf("d4:%d\n", res4.d);
	printf("e4:%d\n", res4.e);

	system("pause");
	return 0;
}

El resultado:

La lógica de código de seguridad es entrar en getChar X, Y, y para añadir, en primer lugar x para escribir entero sin signo, y luego sumando a Y, el resultado final almacenado en la variable d, la salida OUT, Si d es mayor que 10 devuelve 1 si d es menor que o igual a 10 2 retorno.

Entonces la pregunta es, en la entrada del cuarto grupo, d4 = -3, es menor que 10, pero ¿por qué el valor de c es 1 entonces?

Esto viene a ser un entero sin signo de datos y datos diferenciados y de contacto de un entero con signo.

Hay / entero sin signo definido

  • Cuando no hay ningún número (int) y tiene una serie de símbolos (unsignedInt) símbolos aritméticos, hay un número (int) se puede convertir en símbolo número no símbolo (unsignedInt), entonces la aritmética correspondiente.
  • La diferencia entre unsigned int y entero con signo es tipos sin signo se pueden almacenar en el intervalo positivo de dos veces mayor gama de enteros con signo, ya que hay tipos de bits de símbolo para almacenar el símbolo más alta sin símbolo todos los tipos de almacenamiento digital .
  • número entero sin signo no puede almacenar números negativos, pero el almacenamiento máximo valor puede ser duplicado.

Con / sin necesidad de convertir los símbolos de datos entero

Sí -> No: 1) el bit más significativo es 1 si no, para tomar complemento; 2) Si el bit más significativo no es 0, almacenan directamente.

Toma complemento: 1) es positivo, es en sí mismo; 2) es negativo, entonces el bit de signo sin cambios, el resto de ustedes negada, el último uno por uno.

Sí / No hay datos de cálculo entero sin signo

Además hay que saber es , cuando hay un tipo de símbolo y expresión de los tipos sin signo de las variables, todos los operandos se calculan automáticamente convertidos a firmar .

 

A continuación, regrese a este problema en el pasado, cuando la entrada (7, -7), cuando se convierte en un tipo muy grande -7 sin signo, y luego después de la adición de 7, justo en el borde de un derrame, el equivalente se acaba de neutralizado, d es 0, por lo que el devuelto o 1 c.

Pero cuando la entrada (7, -10), cuando el resultado de la adición de los restantes -3 se convierte en un entero sin signo, es un número grande (e = 253), sin duda mayor que 10, entonces, ha habido casos del cuarto grupo, el resultado devuelto es -3, pero c es 1.

Publicados 271 artículos originales · ganado elogios 8 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_17846375/article/details/104881658
Recomendado
Clasificación