webForumDet fria alternativet

Oktala tal

C/C++

10 svar · 832 visningar · startad av tydal

Medlem sedan juni 20034 013 inlägg
Frågan#1

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.

Medlem sedan juni 20014 290 inlägg
#2

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);
}
Medlem sedan juni 20034 013 inlägg
#3

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.

Medlem sedan juni 20014 290 inlägg
#4

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

Medlem sedan juni 20034 013 inlägg
#5

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";

Medlem sedan juni 20014 290 inlägg
#6

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.

Medlem sedan juni 20034 013 inlägg
#7

Vad har du för källa till det?

Medlem sedan juni 20014 290 inlägg
#8

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.

Medlem sedan juni 20034 013 inlägg
#9

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.

Medlem sedan juni 20014 290 inlägg
#10

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 :)

Medlem sedan mars 20025 907 inlägg
#11

Tråden splittad i 2 delar!
Ursprungstråden hittar ni [thread=133134]här[/thread].

Peeer
moderator PHP-forumet

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)