Usually PC gpu are 16 bytes aligned, and even a single float will take 16 bytes.
If you have four floats in a struct it will get packed into 16 bytes and will be fully utilized.
The gpu compiler wont realign your cbuffer for you when they get compiled due to packing in the cpu. So packing your cbuffer right is important! ETC:
Will be 16 bytes.
float - 16bytes ( bad packing )
int4 - 16bytes
float - 4bytes, this two will be packed into a 16bytes flaot4
float - 4bytes
and 8 bytes of unpacked
float4 + 16 bytes
will be 64 bytes
So, a float is never 16bytes unleass it´s packed.