You can use grayscale 16bits per channels images . Or you can save a 16bits RGBA image , and it will be automatically converted to grayscale by blender when used for displacement .
Using grayscale image will save you some disc space and also some memory.
Indeed when these images are displayed on a monitor you can’t tell the difference between 8bits and 16bits. The monitor clamps everything to 8bits. But the software can take advantage of these extra information even if the monitor can’t display them.
8 bits images when loaded in blender are converted to 16 or 32 bits, but they aren’t “interpolated”, the value stay the same. If you got a 1bit (2 color) image , converting it to 8bits won’t magically add color variations to the image and make it smoother. However once it’s converted you can take advantage of the new color range if you modify it , like if you blur the image you’ll get some interpolations of the original colors that weren’t possible in 1bit.
If when using a displacement map, you notice some artifact like a stepping in the displace, something like in the right of this image :
Then you need to redo you displacement map in 16bits , or export it in 16bit if it’s done in another software. If not , you can stay with 8 bits as these artifacts aren’t always noticeable, (it’s the same issue with bump maps and normal maps) . Doing only the 8 -> 16 bit conversion won’t change anything as stated earlier.
You can use png, I’ve never really understand why it must avoided in some case, but I think it’s mostly related to colormanagement and when you deal with different sources/displays. For textures , brush , normal maps, ect… I think it’s fine especially if you’re output is meant to be displayed on monitors and you aren’t dealing with others color profile/space.