¿Cuál es la información (número), si el resultado requerido de la siguiente declaración es: INCREÍBLE?c puzzle (declaración if)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
¿Cuál es la información (número), si el resultado requerido de la siguiente declaración es: INCREÍBLE?c puzzle (declaración if)
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Tendría que ser el valor mínimo de un número entero, es decir, 0x80000000 si es de 32 bits, porque es el único número distinto de cero que sigue siendo la misma cuando negada.
#include <stdio.h>
main()
{
int data = 0x80000000;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Resultado:
AMAZING
Como Richard Pennington señaló correctamente, esto funciona debido a la two's complement representación de los números negativos. El número positivo representable más grande es uno más pequeño en valor absoluto que el número negativo más grande, por lo que si intenta negar el número negativo más grande, se desborda un int y se envuelve, devolviendo el mismo número.
Para computadoras que usan one's complement, el valor negativo de cada número representable también se puede representar sin desbordamiento, por lo que este rompecabezas no tiene solución.
¡Probé esto en mi UNIVAC 1100 después de ajustar por enteros de 36 bits (0x800000000) y no funcionó! –
@Richard, según Wikipedia para UNIVAC: los números eran binarios con valores negativos en el complemento. http://en.wikipedia.org/wiki/UNIVAC_1101 ¡Así que esto no funcionará! Solo funciona en complemento a dos. –
@Mark: Lo sé. Trick comment. ;-) –
Depende del tamaño de un entero y cómo se implementan los enteros, pero en una máquina de dos complementos con enteros de 2 bytes, la respuesta es -32768.
Bueno, es si usted Irá por ahí suponiendo que CHAR_BIT es 8. –
No sé cuál es el tamaño de int en mi máquina. por lo que utiliza un programa para encontrar el valor máximo de int como
void main()
{
int i;
do{
}while(i>i++);
printf ("data=%d",i);
}
encontré el valor máximo de i = -2147483648
ceder el presente a los datos de que esto funcionará ..
Está imprimiendo la dirección ('& i') en lugar del valor (' i'). – finnw
estoy probando esto en Borland C++ 5.5.1 para Windows 32 en Windows XP máquina – chinnagaja
Sí ... ahora entiendo mi error, lo siento mucho por publicar esto, totalmente un gran error de mi parte :( – chinnagaja
tarea por casualidad ? – Paolo
Ver http://en.wikipedia.org/wiki/Quantum_suicide_and_immortality – AaronLS
@aaronls - Enlace ingenioso, pero ¿qué tiene que ver con la pregunta? –