Inom datavetenskap är en offset inom ett array eller annat datastrukturobjekt ett heltal som anger avståndet (offset) mellan objektets början och ett givet element eller punkt, förmodligen inom samma objekt [1] . Begreppet avstånd är endast giltigt om alla element i ett objekt har samma storlek (vanligtvis angivet i byte eller "ord" (en ordnad uppsättning byte eller bitar )).
Till exempel, i en array som Ainnehåller "abcdef"har det fjärde elementet som innehåller tecknet 'd'en offset på tre från början av A.
Inom datorteknik och programmering på låg nivå (som assemblerspråk ) hänvisar offset vanligtvis till antalet adresser som måste läggas till en basadress för att få en viss absolut adress . Detta värde använder endast basadressblocket, vanligtvis en 8-bitars byte, för att specificera storleken på förskjutningen. I detta sammanhang kallas förskjutningen ibland som "relativ adress".
I IBM System/360 -instruktioner innehåller den 12-bitars offset som är inbäddad i vissa instruktioner ett intervall på 0 till 4096 byte. Till exempel, i den ovillkorliga hoppinstruktionen (X'47F0Fxxx'), gav den 12-bitars hexadecimala offset "xxx" en byteoffset från basregistret (15) till grenen [2] . En udda förskjutning kommer att resultera i en programkontroll (såvida inte basregistret innehåller en udda adress), eftersom instruktioner måste justeras på halvordsgränser för att utföras utan avbrott i mjukvara eller hårdvara [3] .
Det föregående exemplet beskriver ett indirekt sätt att komma åt en minnesplats i segmentformat: offset. Anta till exempel att vi vill hänvisa till minnesplatsen 0xF867. Ett sätt detta kan uppnås är att först definiera ett segment med en startadress på 0xF000 och sedan definiera en offset på 0x0867. Dessutom är det också tillåtet att flytta hexsegmentet för att nå den slutliga absoluta minnesadressen. Det bör noteras här att den slutliga absoluta adressen kan nås på olika sätt.