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ä.
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. :)
Ei 8, vaan 16-kantajärjestelmä.
Edit: https://www.ohjelmointiputka.net/oppaat/opas.
Äh niin joo tietty anteeks. Liian myöhä niin sekotin jostain syystä kasiin joka on niin kiva luku =)
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?
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.
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
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.
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ä
Aihe on jo aika vanha, joten et voi enää vastata siihen.