You mind telling us what language/platform this is on? I did some googling on that _BV, looks like a C macro involving Atmel 8-bit microcontrollers or something?
Either way, |= is a binary operator that takes the bitwise OR of both operands and stores the result in the left operand. That basically means that a |= b is short for a = a | b, in the exact same way that a += b is short for a = a + b.
Originally Posted by http://www.micahcarrick.com/05-12-2006/avr-tutorial-digital-output.html
So in your case, supposing MCUCR is an 8-bit register, what you're doing is this:
Judging from your compiler's error, I'm guessing your problem is that some_number is >= 8, which means that the result of 1 << some_number will take up at least 2 bytes. The result of the bitwise OR will then also take up at least 2 bytes, and you can't assign that result back to MCUCR because it's only an 8-bit register.
MCUCR = MCUCR | (1 << some_number)