Issues Reading an encoder

Should not 'end' also be unsigned long - since millis() times are involved?

unsigned long start;
const byte 
   encoderPinA = 3,
   encoderPinB = 4;
const uint16_t end = 300;