Overflow - Constant expression not representable

Tags:    visual-basic

Jeg har følgende kode som giver overflow ved mig.

Fold kodeboks ind/udKode 


Jeg kan sige at BWImagePixels er under 30000, og 1 << 31 burde jo bare sætte det sidste bit, nummer 32.

Hvis jeg fjerner "Or BWImagePixels" skriver den ved "(1 << 31)" at "constant expression is not representable" hvilket det burde være.



har du prøvet at erstatte (1 << 31) med 2147483648?

jeg synes også umiddelbart at det burde virke, men C#'s compiler kan heller ikke lide det, men siger dog at den har foldet udtrykket til -2147483648, altså en signed int. Hvis VB's compiler laver noget lignende, så giver det god nok mening.



Jo tak det virkede.

Dim Header As UInt32 = (2 ^ 31) Or BWImagePixels

Er da godt nok lidt retarderet af compileren at dette vil kompile men ikke det andet.



Nu er det da helt ude i skoven. Hvordan kan:
Dim nibble As Byte = (Header >> (i * 4))
Giver "overflow"??? Hvis noget skulle det da være underflow.



kan det tænkes at være fordi den tænker:
byte = int giver (måske) overflow?
har du prøvet med et cast? (ved ikke hvordan de ser ud i vb)



t