Enkla men fatala buggar

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
guckrum
Inlägg: 1019
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Enkla men fatala buggar

Inlägg av guckrum »

Varför kod som skiftar 258 steg? Det motsvarar ju ungefär 10 upphöjt till 77, vilket närmar sig mängden atomer i universum, typ. Känns lite underligt.
Användarvisningsbild
Icecap
Inlägg: 25038
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Enkla men fatala buggar

Inlägg av Icecap »

Morten: Shift med mer än 8 positioner behövs helt klart om det är en mer-än-8-bit CPU.
Det behövs upp till processorns databredd faktisk.

Men ja, 258 är ganska orealistisk och tyder på att programmörn inte har helt koll på variabler osv.

Är man i behov för att shifta en sammansatt variabel, t.ex. 64 bit i en 32-bit CPU får man fixa lite i programmet för att lösa detta.
Användarvisningsbild
bit96
Inlägg: 2396
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Enkla men fatala buggar

Inlägg av bit96 »

Vänster-skift-operatorn i C (<<) är faktiskt exakt definerad hur den skall funka.

Ex. a << b

Den andra operanden, b i exemplet ovan får ej vara negativ och ej större än eller lika med första operandens längd.
Vad som i så fall händer är odefinerat.

Det är alltså definerat som att vara odefinerat, eller i praktiken är det den som tillverkar kompilatorn som bestämmer vad som skall hända.

Man SKALL alltså se till att andra operanden (b i exemplet ovan) ligger inom korrekta gränser.
Mr Andersson
Inlägg: 1243
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Enkla men fatala buggar

Inlägg av Mr Andersson »

Icecap skrev:
12 oktober 2021, 18:16:05
Morten: Shift med mer än 8 positioner behövs helt klart om det är en mer-än-8-bit CPU.
Det behövs upp till processorns databredd faktisk.
Det Morten menar är att det behövs inte mer än 8 bitars värde för att shifta 256 bitpositioner.
Tekniskt sett räcker det med 5 bitars värde för att täcka en 32 bitars cpu.
guckrum
Inlägg: 1019
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Enkla men fatala buggar

Inlägg av guckrum »

Precis, och barrel shiftern inne i CPUn har inte större shift-range än vad som behövs. Då skulle shiften ta flera klockcykler. Sedan är ju många CPUer RISC, och då kan man ju få in shiftvärdet som en del av instruktionen också. Annars blir det segt:-)
Användarvisningsbild
jesse
Inlägg: 9206
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Enkla men fatala buggar

Inlägg av jesse »

Shiftvärdet (hur många steg som ska shiftas) kan ju bara läggas in som en del av instruktionen om det är ett fast värde. Är det en variabel så krävs ju ändå att värdet laddas först i något register.
Skriv svar