It's possible in Java, but really, by far the easiest way to do it is using Float.floatToIntBits() etc. That's what the method is there for. There's also DataOutputStream which has writeFloat(), but that just calls floatToIntBits() internally. Rather than go into the mathematical details of how to do this without using those methods, I would instead qeustion
why you don't want to use them. Float. floatToIntBits() uses the
IEEE 754 floating-point standard, which predates Java. As far as I know, C# uses the exact same format. So in all likelihood, you can port this stuff to C# or back with no problems.
Even if for some reason you find you need it in a different format, I strongly suspect that using Float.floatToIntBits() will be a valuable first step, as it translates the float into a known, well-documented format which separates the exponent, mantissa, and sign components of the value. Any subsequent bit-shifting you want to do will be much easier after that, I think.
To use an alternate analogy, let's say you wanted to do integer division, but don't want to use the / operator. Sure, it's
possible to write a program in Java or whatever language which will do this for you using the same algorithms we learned in school for long division. If you really, reallyy want to do that, as a learning experience, then OK, fine. But it seems remarkably pointless from any practical standpoint. Much better to just use the tools that you have been provided.