Fick 7 av 8. Missade att 0 framför ett tal gör att det blir oktalt. I C skriver man ju \ före och det är jag mer van vid.
Oktala tal
10 svar · 830 visningar · startad av tydal
tydal skrev:
Fick 7 av 8. Missade att 0 framför ett tal gör att det blir oktalt. I C skriver man ju \ före och det är jag mer van vid.
Nja, \ betyder att man "escapar" efterföljande tecken.
Börjar ett tal med 0 så tolkas det som ett octalt tal.
Prova att köra följande lilla program:
#include <stdio.h>
main() {
int f1=12;
int f2=012;
int f3=0x12;
printf("f1=%d\nf2=%d\nf3=%d\n", f1, f2, f3);
}
GunnarD skrev:
Nja, \ betyder att man "escapar" efterföljande tecken.
Ja, och det är bara så jag har använt oktala tal. 0x för hex använder man ju, men oktala tal är inte lika vanligt förekommande så jag har inte vetat att man bara kunde skriva 0 framför. Eller, vetat det har jag säkert gjort, men i och med att jag inte använder det så har det väl fallit i glömska.
Men, som sagt, med backslash före har man stött på dem ibland.
Provade att sätta backslash framför 0'an i min kod och då gick det inte att kompilera koden. Kompilatorn är GCC 3.2.2
GunnarD skrev:
Provade att sätta backslash framför 0'an i min kod och då gick det inte att kompilera koden. Kompilatorn är GCC 3.2.2
Det är riktigt, för då är det inte längre något tal, utan du måste sätta apostrofer runt. Men i praktiken använder man det ju inte så, utan mer inuti strängar:
char str[] = "\164\145\163\164";
tydal skrev:
Det är riktigt, för då är det inte längre något tal, utan du måste sätta apostrofer runt. Men i praktiken använder man det ju inte så, utan mer inuti strängar:
char str[] = "\164\145\163\164";
I strängar gäller följande:
\123 sätter in tecknet med decimala värdet 123
\0123 sätter in tecknet med octala värdet 123
\0x123 sätter in tecknet med hexadecimala värdet 123
I detta fallet gör \ att man kan ange värdet för ett tecken som skall sättas in, inte vilken bas värdet är i utan där gäller dom vanliga reglerna. Börjar det med 1-9 så är det decimalt, börjar det med 0 så är det octalt och börjar det med 0x så är det hexadecimalt.
Vad har du för källa till det?
tydal skrev:
Vad har du för källa till det?
"den vita boken" av K&R
Man kan också "googla" efter C escape sequence så får man fram dom.
Det låter konstigt, för det som står när man googlar, och det som sker när man provar (jag använder också gcc) är:
\123 = oktalt
\x12 = hex
\0x funkar inte.
Här är definitionen http://c0x.coding-guidelines.com/6.4.4.4.html
Du har rätt i att
\ooo är octalt
\xoo är hex
men det är inte \ som avgör om det är ett oktalt tal.
Vi kanske skall återgå till topic? Fick 8 rätt :)
Tråden splittad i 2 delar!
Ursprungstråden hittar ni [thread=133134]här[/thread].
Peeer
moderator PHP-forumet