La Red de Conocimientos Pedagógicos - Currículum vitae - Problemas de operación de conversión de tipos de lenguaje C

Problemas de operación de conversión de tipos de lenguaje C

Este problema es un poco problemático.

¿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.