A skill is a var (= float). Which means it consists of 4 byte. Each byte has 8 bit.
--> 4 Byte = 32 bit
If you want to set the last bit of a skill you have to do a OR operation with
1000 0000 0000 0000 0000 0000 0000 0000 (binary!).
--> As you see the 32. bit is 1
Because we can't write binary numbers in lite-c, we have to calculate the according hex or decimal number:
0x80000000 (hex)
2147483648 (Dec)
my.skill[1] = my.skill[1] | 0x80000000; //sets the 32. bit
For clearing a bit, you have to make an AND operation with 0111 1111 1111 1111 1111 1111 1111 1111 (binary) = 0x7FFFFFFF (hex)
my.skill[1] = my.skill[1] & 0x7FFFFFFF; //resets the 32. bit
This may sound complicated but if you look into binary operations (AND/OR) and how binary numbers and hexadecimal works it is pretty easy