Can anyone explain why the following doesn’t compile?
byte b = 255 << 1
The error:
Constant value ‘510’ cannot be converted to a ‘byte’
I’m expecting the following in binary:
1111 1110
The type conversion has stumped me.
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Numeric literals in C# are
int, notbyte(and the bit shift will be evaluated by the compiler, hence only the 510 remains). You are therefore trying to assign a value to abytewhich does not fit. You can mask with 255:to reduce the result to 8 bits again. Unlike Java, C# does not allow overflows to go by undetected. Basically you’d have two sensible options when trying to assign 510 to a byte: Either clamp at the maximum value, then you’d get 255, or throw away the bits that do not fit, in which case you’d get 254.
You can also use
unchecked, as lassevk mentioned: