Tengo dos variables de long int tipo como se muestra a continuación:

long int a=-2147483648, b=-2147483648;
a=a+b;

printf("%d",a);

Estoy recibiendo cero. He intentado cambiar el tipo a long long int, pero todavía no estoy recibiendo la respuesta correcta.

  • %d espera un int
InformationsquelleAutor Jijo Jose | 2013-07-22

3 Comentarios

  1. 43

    Debe utilizar %ld para imprimir un long int, y %lld para imprimir un long long int.

    Tenga en cuenta que sólo long long int está garantizado para ser lo suficientemente grande para almacenar el resultado de ese cálculo (o, de hecho, los valores de entrada que esté usando).

    Usted también necesita asegurarse de que usted utilice su compilador en una C99-modo compatible (por ejemplo, el uso de la -std=gnu99 opción para gcc). Esto es debido a que el long long int tipo no fue introducido hasta C99; y a pesar de que muchos compiladores de implementar long long int en C90 modo como una extensión, la constante 2147483648 puede tener un tipo de unsigned int o unsigned long en C90. Si este es el caso de su aplicación, entonces el valor de -2147483648 también tendrá unsigned tipo y por lo tanto será positivo, y el resultado global no será lo que usted espera.

    • int main() { long long int a,b; scanf(«%d%d»,&a,&b); a=a+b; printf(«%lld»,a); getch(); return 0; } aún sin suerte sir….
    • uso %lld para scanf() demasiado.
    • int main() { long long int a,b; a=-2147483648; b=a; a=a+b; printf(«%lld»,a); getch(); return 0; }……………aún no obtener la respuesta…me thk la señal se pierde..
    • Sólo trató de su programa de verbatim, y funcionó. ¿Cuál es su wordsize? (¿cuál es la salida de printf("%d",sizeof(long long int));?)
    • Esto es debido a que el OP es el uso de un C90 compilador que admite long long int como una extensión, en lugar de una C99 compilador. Es el tratamiento de 2147483648 bajo C90 reglas como una de 32 bits unsigned int o unsigned long, y el resultado de la negación es el mismo valor.
    • trató de compilar con c90, y obtuvo el mismo resultado: todo funciona. El resultado de la negación de un número sin signo no es el mismo número, que es la negación de la forma esperada: «La negativa de un unsigned cantidad se calcula restando la promover el valor de el valor más grande de la promover el tipo y la adición de una» [ANSI C A. 7.4.5]. En otras palabras, se hace lo que piensa.
    • lo siento, ahora entiendo lo que usted quiso decir: 2147483648 específicamente es el mismo que -2147483648 en 32 bits. Pero a menos que usted agregue un u en el final del número, debe ser interpretada como signed, no unsigned. Por lo que debe (y, en mi caso, el uso de dos diferentes c90 compiladores) funcionan como se esperaba
    • Exactamente de qué tipo de la constante depende de la anchura de sus tipos básicos. Si usted tiene un C90 compilador con una de 64 bits long int, a continuación, el tipo de 2147483648 será de tipo long int (así, firmada). Sin embargo, si su C90 compilador de 32 bits long int, a continuación, el tipo de 2147483648 será unsigned long int. Esto se define en el §3.1.3.2 en el C90 estándar: El tipo de una constante entera es el primero de la lista correspondiente en el que su valor puede ser representado. Unsuffixed decimal: int, long int, unsigned long int.

  2. 2

    A la toma de entrada «long int «y la salida» long int » en C es :

    long int n;
    scanf("%ld", &n);
    printf("%ld", n);

    A la toma de entrada «long long int «y la salida» long long int » en C es :

    long long int n;
    scanf("%lld", &n);
    printf("%lld", n);

    Espero que te haya despejado..

Dejar respuesta

Please enter your comment!
Please enter your name here