c++ - sirve - Aplicación de la operación de módulo en un valor de tipo int y entero sin signo
tipos de variables en c++ y sus rangos (1)
cout << a% b << endl;
En la línea anterior, a
se convierte a tipo sin signo (ya que usted declaró b
como unsigned
) debido a las conversiones aritméticas habituales . Cuando interpreté la representación binaria de -7777 en mi máquina como valor positivo, arroja 4294959519, lo que podría explicar el resultado de 9 en su caso.
En este caso:
cout<< -7777%10 <<endl;
no se realiza ninguna promoción ya que ambos literales son de tipo int
y se ve el resultado -7.
Por ejemplo, el código a continuación
int a = -7777;
int b = 10;
cout<< a % b<<endl;
cout<<(a+b)%b<<endl;
cout<< -7777%10 <<endl;
Los resultados son:
-7
-7
-7
pero si cambio el tipo de b a unsigned int, tiene diferentes valores;
int a = -7777;
unsigned int b = 10;
cout<< a % b<<endl;
cout<<(a+b)%b<<endl;
cout<< -7777%10 <<endl;
Los resutls son
9
9
-7
¿Podría algún cuerpo aconsejar cómo funciona aquí? ¿Cómo vienen las diferencias?
Por cierto: estoy usando C ++ en la última versión de Xcode.