UL es para definir que es un valor sin signo. Yo imagino que es la abreviación de UnsignedLiteral.
Nunca me puse a ver como serían estas funciones, ya que para setar por ejemplo el bit 7 de una variable suelo hacer
varible = variable | 0b10000000;
que se puede escribir como...
para borrar un bit hago una and con un valor que tenga a 0 el bit que quiero borrar
en este caso borro el bit 3 de la variable.
Para testear un bit, yo suelo hacer una and con un número que tenga a 1 el bit que quiero testear, y luego evalúo el valor...
variable_aux = variable & 0b10000000; // si el bit 7 de variable estaba en 1, el resultado de la and es 128
if (variable_aux == 128) .... // evaluo el valor, para saber si el bit estaba en 1
Se podría hacer un función que desplace hacia la izquierda la variable según el bit que quieras testear y luego una XOR con 0. Así, se el resultado da 1 es porque el bit estaba en 1 y si da 0 es porque el bit estaba en 0