2011-08-07 44 views
5

En el programa que figura a continuación,¿Qué significa 0xFE en un programa C?

void main() 
{ 

     int x=0xFE; 

     int y=0xF3; 
     ..... 
} 

¿Qué valores son asignados por x=0xFE y y=0xF3? ¿Qué representa 0x?

+1

Uhm .. [254] (http://en.wikipedia.org/wiki/254_%28number%29) y [243] (http://en.wikipedia.org/wiki/243_%28number%29)? – cnicutar

+2

mi respuesta pragmática es: use 'printf' :) –

Respuesta

14

Escribir un valor con 0x significa que está escrito en hexadecimal notation, donde los números 0-9 y el "número" AF adicional se utilizan para obtener un sistema numérico con la base 16. La gran ventaja de esto es que cada hexadecimal dígito representa exactamente 4 bits.

0xFE = 254 
0xF3 = 243 

Así x = 254 e Y = 243.

+0

¿qué valor se asignará en x y y? – Nitin

+3

@downvoter: por favor explique. –

+0

@Nitin: la respuesta dice: x se asignará 254, y se le asignará 243. '0xFE' y' 254' son exactamente el mismo número, solo que '0xFE' es notación hexadecimal, y' 254' es notación decimal . IOW, '0xFE'es solo otra forma de escribir' 254'. Más aquí: http://en.wikipedia.org/wiki/Hexadecimal –

2

los valores son en hexadecimal, ya que están precedidos por el identificador de 0x. Para convertir los valores, puede usar la calculadora de su computadora en el modo de programador o en google. http://screensnapr.com/v/aQEPYk.png

+1

¿Ya nadie hace las conversiones base16 a base10 con lápiz y papel? :) –

+1

¿Ya nadie lo hace en su cabeza? Es bastante fácil para 2-3 dígitos si conoces tus múltiplos de 16 ... –

+0

@R: Ok, rápido, sin trampas - ¿qué es 0x0D92 en decimal? –

6

Los números se pueden representar de diferentes maneras. En C, puede usar decimal (por ejemplo, 243), octal (por ejemplo, 0363) o hexadecimal (0xF3).

Si se escribe 243, que significa

243 = 2*10^2 + 4*10^1 + 3*10^0 = 2*100 + 4*10 + 3 = 243 

donde ^ significa "al poder de". Eso significa que nuestros números normales son base 10 o decimal. El hexadecimal utiliza la base 16, y los dígitos son ABCDEF, donde 0 = 0, ... 9 = 9, A = 10, B = 11, ... F = 15. Entonces 243 también se puede escribir como

0xF3 = 15*16^1 + 3*16^0 = 15*16 + 3 = 243 

Eso es lo que ves. En otras palabras, 0xF3 es solo otra manera de escribir 243, y 0xFE es otra manera de escribir 254 (15 * 16 + 14 = 254).

La ventaja es que cada dígito hexadecimal representa 4 bits, por lo que se pueden usar 2 dígitos hexadecimales para mostrar un byte. Si sabe que 0x0 es 0000 en binario, y así sucesivamente, hasta 0xF, que es 1111 en binario, un usuario experimentado puede "ver" fácilmente los bits en un byte.

FWIW, octal está en la base 8, por lo que los únicos dígitos son. Siempre me ha resultado un poco incómodo de usar.