Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Koodissa olevat bitit

Sivun loppuun

AdeRide [10.12.2004 21:56:43]

#

Joissakin lähdekoodeissa ja otsikko tiedostoissa on tällaisia pätkiä

esim.

0x00000001
0x00000002
0x00000004
0x00000008
0x00000010
0x00000040

Minun käsityksen mukaan ne ovat bittejä, mutta miten niitä oikein "käsitellään" tai miten ne oikein ns. luetaan. Onko netissä mitään ohjetta noiden bittien ratkaisemiseksi, kun moni ohjelmoija osaa noita sinne koodiinsa oikeaan paikaan lätkiä.

sooda [10.12.2004 22:08:58]

#

Noi on heksaa. Siis sitä 8-kantaisen järjestelmän kummia lukuja :) Jos winukkaa käytät niin nappaa vaikka laskin auki ja laita funktiomoodi päälle ja vaihda heksamoodiin ja heitä tommonen luku (ilman 0x-alkua) siihen ja vaihda desimaalimoodi ja tsädääm 10-kantajärjestelmäluku. :)

Blaze [10.12.2004 22:15:06]

#

Ei 8, vaan 16-kantajärjestelmä.

Edit: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=luvut

sooda [10.12.2004 22:28:58]

#

Äh niin joo tietty anteeks. Liian myöhä niin sekotin jostain syystä kasiin joka on niin kiva luku =)

AdeRide [10.12.2004 22:49:24]

#

Mitä ne oikein vaikuttaa siellä koodissa, eikö ne oo sama laittaa ihan orkkis lukuina :D ( ei varmaan oo ihan sama ), mutta miksi niitä oikein siellä on?

Antti Laaksonen [10.12.2004 23:04:38]

#

Saman luvun voi ilmoittaa monella eri tavalla, 16 ja 0x10 tarkoittavat siis ihan samaa asiaa. Ohjelmoinnissa käytetään välillä heksajärjestelmää, koska semmoiset luvut pystyy helposti muuttamaan perustana olevaan binäärijärjestelmään. Ohjelman toimintaan lukujen esitystavalla ei ole kuitenkaan mitään vaikutusta.

FooBat [11.12.2004 00:46:19]

#

Heksaluvut ovat mukavia bittien käsittelyssä, koska heksaluvussa jokainen numero/kirjain kuvaa neljää bittiä
0001 = 0x1
0010 = 0x2
0100 = 0x4
1000 = 0x8
...
1100 = 0xC
1111 = 0xF

1110 1001 = 0xE9

Lukuja 0x01, 0x02, 0x04, 0x08, 0x10... käytetään paljon siksi, että ne ovat 2:n potensseja ja binääriesityksessä ne esitetään yhdellä 1 bitillä. Näitä voidaankin käyttää erilaisten bittioperaatioden apuna valitessa tai asetettaessa jotain yksittäistä bittiä normaalissa integer luvussa.

Esim.

muuttuja = muuttuja | 0x4; // asetetaan 3. bitti

int onkoBittia = muuttuja & 0x8; //onko 4. bitti asetettu

muuttuja = muuttuja | 0x1 | 0x2 | 0x40; // 1,2,7

arcatan [11.12.2004 08:46:21]

#

Heitänpä nyt tähän perään kysymyksen, että onko olemassa joku standardi tapa käyttää binäärilukuja C(++)-koodissa? Tyyliin 10110b. Sellainenkin olis joskus kiva, mutta enpä ole vielä tavannut. Kääntäjänä gcc ja sen variantit.

FooBat [11.12.2004 15:06:09]

#

Käsittääkseni C:ssä ei onnistu kuin heksa, octal ja normaalit desimaaliluvut.
Esim. suurin positiivinen 32-bittinen integer näillä kolmella tavalla.

int hex   = 0x7fffffff;   //16-kanta
int oct   = 017777777777; //8-kanta
int dec   = 2147483647;   //10-kanta
//int bin = b01111111111111111111111111111111; //ei ole C:tä

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta