Mitä eroa on %ul- ja %lu C-muodon määrittäjillä?

Mita Eroa On Ul Ja Lu C Muodon Maarittajilla



Oikeanlainen käyttö muotomäärityksiä on kriittinen osa onnistunutta ohjelmointia C-kielellä. Tämä selittää, miksi on tarpeen tietää, miksi %ul ja %lu muotomäärityksiä erota. Näiden kahden välisen eron ymmärtäminen on niin tärkeää, koska se muuttaa ohjelmoijan vuorovaikutusta järjestelmäympäristön kanssa, ja mahdollisia virheitä voi syntyä, kun näitä muotomääritteitä käytetään väärin.

Mitä ovat %ul- ja %lu-muotomääritykset?

Aluksi on tärkeää huomata, että molemmat %ul ja %lu muotomäärityksiä käytetään ohjelmoitaessa C-kielellä ja ne molemmat edustavat etumerkittömiä pitkiä tietotyyppejä. Kuitenkin kirjainten sijainti ' l ' ja ' sisään ” eroaa. Kirjeet ' sisään ' ja ' l ' tarkoittaa ' allekirjoittamaton ' ja ' pitkä ”, vastaavasti. Tarkoitettu argumenttityyppi määräytyy näiden kirjainten järjestyksen mukaan. ' %sisään ” määrittää, että sen merkin tai merkkijonon tietotyyppi, johon sitä käytetään, on allekirjoittamaton int samalla kun ' %l ”-osa määrittää, että se on etumerkitön pitkä tietotyyppi. Toisin sanoen, %ul osoittaa etumerkittömän pitkän tietotyypin while %lu tarkoittaa samaa, mutta lisämerkinnällä ' pitkä ”koon muuttaja.

Tämän seurauksena, jos käytät %ul muuttujalle, joka ei ole etumerkitön pitkä kokonaisluku, voit saada päätteen l lähdön lopussa. Kun yrität tulostaa muuttujaa tietyllä tietotyypillä, on tärkeää käyttää sopivaa muotomäärittelijää.







Tässä on esimerkkikoodi, joka näyttää kuinka %ul ja %lu muotomääritykset vaihtelevat:



%ul muotomäärittäjä C:ssä

#include

int main ( ) {
allekirjoittamaton pitkä int i = 1234567890 ;
printf ( 'Käytetään muotoa %%ul: %ul \n ' , i ) ;
palata 0 ;
}

Yllä olevassa koodissa määritämme muuttujan i etumerkittömänä pitkänä kokonaislukuna ja alusta se 1234567890 . The printf komento käyttää sitten %ul muotomääritys, jonka arvo tulostetaan i . Koska vain %sisään on määritteen pääkomponentti ja l on muodon ulkopuolella, se tulostaa numeron loppuliitteellä l lopussa.



Lähtö





%lu Muotomäärittäjä C:ssä

#include

int main ( ) {
allekirjoittamaton pitkä int i = 1234567890 ;
printf ( 'Käytetään muotoa %%lu: %lu \n ' , i ) ;
palata 0 ;
}

Yllä olevassa koodissa etumerkitön pitkä kokonaislukumuuttuja i ilmoitetaan ja alustetaan numeroon 1234567890 ja tulostetaan sitten käyttämällä %lu muodon määrittäjä.

Lähtö



Erot %ul:n ja %lu:n muotomääritteen välillä C:ssä

1: Arvoalue

Tärkein ero %ul ja %lu liittyy arvoalueeseen, jonka niiden odotetaan edustavan. C:ssä ohjelmoitaessa etumerkitön pitkä tietotyyppi käyttää eri muotoa kuin muut tietotyypit, mukaan lukien etumerkitön int-tietotyyppi. 32-bittinen int vaatii vain 32 bittiä muistia tallentaakseen arvonsa, kun taas etumerkitön long vaatii 64 bittiä samantyyppisille tiedoille, joten sillä on merkittävämpi alue kuin int:llä. Se tarkoittaa, että %ul hyväksyy arvot välillä 0 - +2^32-1, kun taas %lu määrittäjä hyväksyy arvot välillä 0 - +2^64-1.

2: Tarkkuus

Ero on myös niiden arvojen tarkkuudessa, joita niiden odotetaan edustavan. Kanssa %ul täsmennyksessä, ohjelmoija pystyy edustamaan vain arvoja 2^32-1 asti, kun taas %lu täsmennys voi edustaa arvoja aina 2^64-1 asti. Vaikka tämä ei ensi silmäyksellä ehkä vaikuta suurelta erolta, se voi epäsuorasti vaikuttaa tulosten tarkkuuteen. Ohjelma, joka on suunniteltu tallentamaan arvon, jonka alue on esimerkiksi +2^64, tulee virheisiin käytettäessä %ul määrittäjiä, koska ne eivät pysty tallentamaan tietoja halutussa muodossa, mikä johtaa tarkkuuden menettämiseen.

3: Muisti

Lopuksi, %ul ja %lu eroavat myös muistinkäytöstään. The %ul Specier vaatii 32 bittiä muistia tiedoille, kun taas %lu vaatii 64 bittiä samantyyppisille tiedoille, mikä tarkoittaa, että %lu vie noin kaksi kertaa enemmän muistia kuin %ul . Tämä ei ehkä vaikuta valtavalta erolta pienissä, pienimuotoisissa ohjelmissa, mutta tämä voi nopeasti tulla hallitsemattomaksi, koska ohjelman muistin käyttö lisääntyy usein monimutkaisuuden myötä, mikä tarkoittaa, että %lu ei ole ihanteellinen käsiteltäessä suuria sovelluksia.

4: Muoto

On tärkeää ymmärtää tulosteen tarkka muoto käytettäessä %ul tai %lu . Tarkemmin sanottuna %ul muotomäärittäjä tulostaa aina kokonaisluvun 8-numeroisena heksadesimaaliarvona, kun taas %lu muotomäärittäjä tulostaa kokonaisluvun 8-numeroisena desimaaliarvona. Tämä tarkoittaa, että jos kokonaisluku esitetään heksadesimaaliarvona, se tulee tulostaa muodossa a %ul kun taas jos kokonaisluku esitetään desimaaliarvona, se tulisi tulostaa muodossa a %lu .

Lopulliset ajatukset

On tärkeää ymmärtää tarkat erot %ul ja %lu muotomäärityksiä C-kielen kanssa työskennellessäsi. Vaikka ne saattavat näyttää samanlaisilta, tärkein ero on se %ul muoto vaatii etumerkittömän pitkän kokonaisluvun parametrin, kun taas %lu muoto odottaa pitkää etumerkitöntä kokonaislukua. The %ul muotomäärittäjä tulostaa aina kokonaisluvun 8-numeroisena heksadesimaaliarvona, kun taas %lu muotomäärittäjä tulostaa kokonaisluvun 8-numeroisena desimaaliarvona. Lopuksi on tärkeää huomata, että %ul ja %lu muotomääritteitä voidaan käyttää vain, kun työskentelet muuttujien kanssa, joiden tyyppi on ' pitkä '.