long not behaving very long?

I am attempting to form SDS910 instructions by shifting op codes and ORing in address fields. But the left shift operator doesn’t seem to behave.
Here is a reduced version of my program that demonstrates the problem. I would have expected the octal 41 to move from right to left but it doesn’t. Can any kind soul tell me what I’m doing wrong?

// SDS910 CPU Simulator

#define BRX 041

long myLong; //32 bits, right?

void setup() {
bootSDS(); //load program, initialize PReg

void bootSDS() {
for (int x = 0; x < 22; x++) {
myLong = (BRX << x);
Serial.print (x);
Serial.print(" “);
Serial.print(myLong, OCT);
Serial.print(” ");
Serial.println(myLong, HEX);

void loop() { //turn the crank

BRX is a constant literal (did you mean for it to also be written in octal?) It is only 16 bits wide unless you explicitly make it a long. When you shift more than 16 places you shift off the end of it.

The fact that you were planning on next assigning it to a long is irrelevant. That doesn't happen until after the shift.

Okay, so I made it 041L and that fixed it. Thank you for your quick reply. Oh, and yes, I did mean for it to be octal.