I am doing a project of simulating a CPU using my pc and Turbo C.

I have,

void execInst(int inst)
int opCode;
int operand;

opCode = inst >> 8;
operand = inst & 0xff;

switch (opCode) {
// default: Handle illegal instruction here.
case LDA:
Cpu.a = operand;

case STA:
Mem[operand] = Cpu.a;

What is the justification for "8" above and also for "0xff" ? Are they correct?

Also when declaring
#define STA 1

for the switch statement, the "1" above - can it be arbitary - or should it be related to OpCode?