& es el operador AND, en este caso estás anding ver_ihl con 0xf que tiene el efecto de borrar todos los bits que no sean los menos signifcant 4
0xff & 0x0F = 0x0F
ver_ihl se define como primera 4 bits = versión + segundo = longitud de la cabecera 4 Internet. La operación y elimina los datos de la versión dejando los datos de longitud por sí mismo. La longitud se registró como el recuento de palabras de 32 bits lo que la convierte * 4 ip_len en el recuento de bytes en la cabecera
En respuesta a tu comentario:
bit a bit y ands los bits correspondientes en los operandos. Cuando tú y cualquier cosa con 0 se convierte en 0 y cualquier cosa con 1 permanece igual.
0xf = 0x0f = binario 0000 1111
Así que cuando usted y 0x0f con cualquier cosa los primeros 4 bits se ponen a 0 (como eres anding contra 0) y los últimos 4 bits permanecen como en el otro operando (como lo eres y anding ellos contra 1). Esta es una técnica común llamada enmascaramiento de bits.
http://en.wikipedia.org/wiki/Bitwise_operation#AND
1 por ser honesto y minucioso :) –