2011-08-07 17 views
5

W danym programie poniżejCo oznacza 0xFE w programie C?

void main() 
{ 

     int x=0xFE; 

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

Jakie wartości są przypisywane przez x=0xFE i y=0xF3? Co oznacza 0x?

+1

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

+2

moja pragmatyczna odpowiedź brzmi: użyj 'printf' :) –

Odpowiedz

14

Zapisanie wartości za pomocą 0x przed oznacza, że ​​jest napisane w hexadecimal notation, gdzie numery 0-9 i dodatkowy "numer" AF są używane do uzyskania systemu liczbowego z podstawą 16. Dużą zaletą tego jest to, że każdy szesnastkowy cyfra reprezentuje dokładnie 4 bity.

0xFE = 254 
0xF3 = 243 

więc x = 254 i y = 243.

+0

jaka wartość zostanie przypisana w X i Y? – Nitin

+3

@downvoter: wyjaśnij. –

+0

@Nitin: odpowiedź brzmi: x zostanie przypisane 254, y zostanie przypisane 243. '0xFE' i' 254' mają dokładnie taką samą liczbę, tyle że '0xFE' jest zapisem szesnastkowym, a' 254' jest zapisem dziesiętnym . IOW, '0xFE' to po prostu inny sposób zapisu' 254'. Więcej tutaj: http://en.wikipedia.org/wiki/Hexadecimal –

2

Wartości są w kodzie szesnastkowym, ponieważ są one poprzedzone przez identyfikator 0x. Aby przekonwertować wartości, można użyć kalkulatora komputerowego w trybie programisty lub google. http://screensnapr.com/v/aQEPYk.png

+1

Czy nikt już nie bazuje na 10 konwersji z ołówkiem i papierem? :) –

+1

Nikt już tego nie robi w ich głowie? To całkiem proste dla 2-3 cyfr, jeśli znasz wielokrotności 16 ... –

+0

@R: Ok, szybkie, bez oszukiwania - co to jest 0x0D92 w systemie dziesiętnym? –

6

Numery można reprezentować na różne sposoby. W języku C można używać wartości dziesiętnych (na przykład 243), ósemkowej (na przykład 0363) lub szesnastkowej (0xF3).

Jeśli piszesz 243, to znaczy

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

gdzie ^ oznacza "moc". Oznacza to, że nasze normalne liczby to 10 lub dziesiętnie. Szesnastkowy używa bazy 16, a cyfry to ABCDEF, gdzie 0 = 0, ... 9 = 9, A = 10, B = 11, ... F = 15. Zatem 243 można również zapisać jako

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

To właśnie widzisz. Innymi słowy, 0xF3 to po prostu inny sposób zapisu 243, a 0xFE to inny sposób zapisu 254 (15 * 16 + 14 = 254).

Zaletą jest to, że każda cyfra szesnastkowa reprezentuje 4 bity, więc 2 cyfry szesnastkowe mogą być używane do wyświetlania bajtu. Jeśli wiesz, że 0x0 to 0000 w binarnym i tak dalej, aż do 0xF, czyli 1111 w binarnym, doświadczony użytkownik może łatwo "zobaczyć" bity w bajcie.

FWIW, ósemkowy jest w bazie 8, więc jedyne cyfry to. Zawsze uważałem, że jest to trochę niewygodne w użyciu.