Problemas de operación de conversión de tipos de lenguaje C
¿Es cierto?
¿Aunque usted declaró que no firmó? ¿Ciel? a, b, c, d, e;
Pero de hecho, al realizar las cuatro operaciones aritméticas +-*/, en realidad la trata como una variable entera int.
¿Mirar primero a=0? No hay nada malo en eso.
B=251,0000 si es tipo int? 0000?1111?1011 (32 en total, solo escribo estos)
¿Es porque b no está firmado? Tipo Char, ¿entonces cada dígito binario de B es 1111?
Bueno, este es el punto.
A-b==-251 ahora se ha convertido en un tipo int, que es la representación binaria (código complementario) de -251 en la computadora.
251?:0000?0000?0000?0000?0000?0000?1111?1011
El código inverso de 251:1111?1111?1111?1111?1111?1111? 0000 ?0100 más 1: significa -251.
1111?1111?1111?1111?1111?1111?0000?0101
Esta es la representación de -251 en la memoria.
Bien
En este momento, este valor está asignado a d, por lo que solo queda el número más bajo de 8 dígitos 0000, otro número sin signo. Mira, ya son las cinco.
Entonces el valor de d termina siendo 5.
Aquí C=(a-b)/4
-251/4==-62 (entero)
-62 dijo en la computadora:
p>
62:?0000?0000?0000?0000?0000?0000?0011?1110
anticode más 1:1111?1111?1111?1111?1111?1111? 1100?0001+ 1
? 1111?1111?1111?1111?1111?1111?1100?0010
Toma los 8 bits más bajos y asigna un valor a c:
c? :1100?0010
¿Porque c no está firmado? ¿Ciel? El bit más significativo no es el bit de signo, que es 194 cuando se convierte a un número entero.
Entonces al final C es 194 y D es 5.