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:
example 1
cbuffer
float
flaot2
float
Will be 16 bytes.
example 2
cbuffer
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.