Avatar billede xeon Nybegynder
01. juli 2003 - 14:04 Der er 22 kommentarer

Kan ikke huske hvad det hedder og er det rigtigt

Hvad hedder det nummer man kan bruge til at skrive tegn med når man holder alt nede.
eks vil alt+122 give z.

jeg kan få nummeret frem sådanher men synes det ser mystisk ud

char a='z'
int i=+a;

nogen der kan forklare det........
Avatar billede segmose Nybegynder
01. juli 2003 - 14:25 #1
a er bare noget lagerplads der fortolkes som en binært tal fra 0 til 255 (eller -128 til +127 hvis signed), nu har z værdien 122 i ascii og de fleste C/C++ implemntationer bruger direkte ASCII som deres char.

i er en int og når du ligger noget til der kan fortolkes som et tal bliver der lavet en type konvertering til int af denne talværdi, char bliver forlænget (med fortegn hvis signed) long bliver evt. forkortet med precisions tab til følge.
Avatar billede xeon Nybegynder
01. juli 2003 - 14:29 #2
det forstod jeg ik meget af
Avatar billede segmose Nybegynder
01. juli 2003 - 14:31 #3
int i=+a;
giver forøvrigt udefineret værdi da i ifølge standarden ikke er initialiseret fra start.
Avatar billede xeon Nybegynder
01. juli 2003 - 14:32 #4
hvorfor virker det så.. i kommer til at indeholde 122.....
Avatar billede segmose Nybegynder
01. juli 2003 - 14:36 #5
Tegn tabel nummer? det er det tal du får på din PC når du trykker alt ??? det er afhængigt af hvilket os og tegntabel du har loaded.

int i=+a;
virker måske og en gang imellem men standarden garanterer ikke at det virker, prøv

int i = a;

istedet.
Avatar billede segmose Nybegynder
01. juli 2003 - 14:37 #6
måske misforstår jeg hvad det er du er ude efter?
Avatar billede -mundi- Nybegynder
01. juli 2003 - 14:41 #7
alt+122 = alt + "nummeret på den char fra ASCII tabellen du vil have skrevet"
Avatar billede -mundi- Nybegynder
01. juli 2003 - 14:46 #8
ang forklaringen så gemmer du tegnet z i en char variabel som hedder a
du laver derefter en int variabel i som du sætter lig med variabel a, da de er af forskellige typer (int og char) laves der en convertering, et opslag i ascii tabellen og man finder ud af at z har nummer 122, som så gemmes i 'i'
Avatar billede segmose Nybegynder
01. juli 2003 - 14:55 #9
mundi, det afhænger vel af hvilken tegntabel der er valgt i øjeblikket? for det meste vil værdier under 128 være ASCII men jeg mener ikke man kan være sikker.
Avatar billede arne_v Ekspert
01. juli 2003 - 22:10 #10
xeon>

Ethvert tegn har en tal værdi.

Sammenhængen mellem tegn og tal værdi kan godt variere.

På de fleste computere (vel alt andet ened IBM mainframe)
er de engelske bogstaver + tal + de meste almindelige tegn som
punktum og komma beskrevet i en tabel der hedder ASCII.

Du kan se den samlede tabel her:
  http://www.asciitable.com/

Det betyder at:

char c = 'z';

og:

char c = 122;

vil betyde præcis det samme på alle computere som bruger ASCII (og
det er som sagt de fleste).

Problemerne kommer når vi begynder at snakke om bogstaver der ikke
er i det engelske alfabet (på dansk bl.a. ÆØÅæøå).

Så er der et hav af standarder og deraf følgende  konverterings
problemer.
Avatar billede arne_v Ekspert
01. juli 2003 - 22:13 #11
char a='z'
int i=+a;

giver måske nok det forventede resultat på din computer med din compiler
med dit program.

Men det er så fordi i tilfældigvis har haft værdien 0.

Det kan ændre sig hvis du tilføjer nogle flere linier til dit program
eller opdaterre din compiler.

char a='z'
int i=a;

er det som du ønsker.
Avatar billede arne_v Ekspert
01. juli 2003 - 22:18 #12
Og der er ikke skyggen af noget tabel opslag involveret i konvertering
fra char til int.

Det er en simpel konvertering fra en 8 bit integer til typisk en 32
bit integer.

Ren integer uden hensyn tagen til hvilket karakter sæt der bruges.
Avatar billede redhat9user Nybegynder
01. juli 2003 - 22:24 #13
næhov arne_v og segmose

i+=a er det samme som i=i+a, altså udefineret når i er udefineret
i=+a er det samme som i=a, altså uafhængigt af det tidligere indhold af i
Avatar billede arne_v Ekspert
01. juli 2003 - 22:28 #14
Hæ hæ.

Det har du faktisk ret i.

Sådan er det efter ANSI C.

Folk med som er født før ca. 1950 kan undskylde sig med at original K&R C
var anderledes (+= og =+ var det samme).

Desværre er jeg ikke gammel nok til at kunne undskylde mig med den.

Jeg beklager.
Avatar billede segmose Nybegynder
01. juli 2003 - 22:32 #15
:)
Jeg var bare sikker på at =+ var forbudt nu, jeg må vente til jeg kan læse den hellige tekst K&R2 til imorgen.
Avatar billede arne_v Ekspert
01. juli 2003 - 22:39 #16
Jeg mener bestemt ikke at den er forbudt.

Den er overflødig.

Men:
  i=-a;
er jo ikke overflødig.
Avatar billede segmose Nybegynder
01. juli 2003 - 22:42 #17
> arne_v 01/07-2003 22:18:23
Hvis du taster xxx (>127) ind på en russisk/engelsk/anden windows vil du i mange tilfælde få et andet tegn end på en dansk, værdien vil dog være det samme nemlig xxx.
Avatar billede arne_v Ekspert
01. juli 2003 - 22:46 #18
xxx kan være et andet tegn på russsisk, men konverteringen fra char til int
er ligeglad - det er ren integer logik.
Avatar billede segmose Nybegynder
01. juli 2003 - 22:51 #19
Ok, så er vi enig.
Avatar billede arne_v Ekspert
11. juli 2003 - 19:42 #20
xeon>

Tid at lukke spørgsmålet ?
Avatar billede arne_v Ekspert
22. juli 2003 - 22:37 #21
??
Avatar billede arne_v Ekspert
31. juli 2003 - 08:27 #22
??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester