Betydning (datalogi)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 24. februar 2021; checks kræver 2 redigeringer .

En værdi i programmering er et  dataelement , som er et af de mulige medlemmer af en datatype [1] , som kan svare til en eller anden tilstand af en variabel eller konstant af den tilsvarende type. For eksempel 2 er en værdi af heltalstypen .

På sprog med evnen til at tildele værdier til variabler, bliver det nødvendigt at skelne mellem r-værdier (r-værdi - indhold) og l-værdier (l-værdi - placering) af en variabel [ 2] .

deklarative sprog skal værdier være referentielt gennemsigtige . Dette betyder, at outputværdien er uafhængig af placeringen af ​​udtrykket (eller underudtrykket), der kræves for at evaluere værdien.

L-værdier og r-værdier

Ideen om værdier og r-værdier kommer fra programmeringssprog med tildelingsoperatorer, hvor værdier til venstre (venstre) og højre (højre) for operatøren bruger en anden evalueringstilstand. l-værdien peger på et objekt, der fortsætter ud over et enkelt udtryk. En r-værdi er en midlertidig værdi, der ikke består ud over det udtryk, der bruger den. [3]

Begreberne l-værdi og r-værdi blev introduceret i CPL -sproget . Begreberne i udtryk for r-værdier, l-værdier og r/l-værdier svarer til følgende parametertilstande : inputparameter (har en værdi), outputparameter (kan tildeles) og input/outputparameter ( har en værdi og kan tildeles), men der er tekniske forskelle mellem sprog afhængigt af konteksten.

R-værdier og adresser

På mange sprog, især C-lignende, har l-værdier en lageradresse , der er programmatisk tilgængelig for det eksekverende program (for eksempel ved at bruge "&"-adresseringsoperatoren i C/C++). Det betyder, at l-værdier er variable eller dereferencer til specifikke hukommelsesområder. R-værdier kan være l-værdier (se nedenfor) eller ikke-l-værdier (et udtryk introduceret for at skelne det fra l-værdier). Tag for eksempel et udtryk 4 + 9i C-sproget. Ved kørsel genererer programmet værdien 13, men da programmet ikke angiver, hvor disse 13 er indeholdt, er udtrykket ikke en l-værdi. På den anden side, hvis et C-program erklærer en variabel x, der er tildelt værdien 13, så har udtrykket xværdien 13 og er en l-værdi.

Først betegnede udtrykket l-værdi i C-sproget noget, som noget kan tildeles (deraf navnet, hvilket indikerer, at det er til venstre (til venstre) af tildelingsoperatoren), men da det reserverede ord const(konstant ) har blevet tilføjet til sproget ), lyder udtrykket nu som "modificerbar l-værdi". I C++11 er der en speciel semantisk glyf &&for "brug kun adressen på et udtryk af compileren"; det vil sige, at adressen ikke kan beregnes af operatøren &under programafviklingen. (se flyttesemantik ).

Umiddelbar betydning

Denne type reference kan bruges af alle r-værdier, inklusive både l-værdier og ikke-l-værdier. Nogle processorer har instruktioner, der har en umiddelbar værdi .  Den umiddelbare værdi gemmes som en del af en instruktion, der typisk bruger den til at placere den i et register eller tilføje eller trække fra den. De øvrige dele af instruktionen er opkoden og modtageren (registret). Det sidste kan være uudtalt. En ikke-umiddelbar værdi kan være i et register eller i hukommelsen, og en instruktion skal indeholde en direkte eller indirekte adresse på værdien, såsom indekset for det register, hvorfra værdien er taget.

L-værdi

L-værdi som udtryk peger på et objekt[ angiv ] . En ikke-modificerbar (konstant) l-værdi har en adresse, men kan ikke ændres. I modsætning hertil giver en foranderlig l-værdi dig mulighed for ikke kun at hente et objekt, men også tildele en anden værdi til det. En R-værdi er ethvert udtryk (inklusive l-værdier), og en ikke-l-værdi er ethvert udtryk, der ikke er en l-værdi. Et eksempel på en ikke-l-værdi er en umiddelbar værdi, der ikke har nogen adresse.

I assemblersprog

Værdien kan være af enhver af de tilgængelige datatyper : den kan være en streng, et ciffer eller et enkelt tegn.

Mange processorer understøtter flere størrelser af umiddelbare værdier, såsom 8 eller 16 bit, ved hjælp af forskellige instruktionskoder for hver. Hvis programmøren indsætter en værdi, der ikke passer, udsender assembleren fejlen "Udenfor rækkevidde " .  De fleste assemblere tillader umiddelbare værdier i ASCII- , decimal- , hexadecimal- , oktal- eller binære formater. Det betyder, at ASCII-tegnet er identisk med værdien eller . Byterækkefølgen i tekststrenge kan variere afhængigt af typen af ​​processor, assemblerversion eller computerarkitektur. 'A'650x41

Noter

  1. Mitchell, 1996 , s. 9.
  2. Mitchell, 1996 , s. 389-390.
  3. Lværdier og Rværdier (Visuel C++) . MSDN . Hentet 3. september 2016. Arkiveret fra originalen 9. oktober 2018.

Litteratur