The binary multiplication algorithm with ints can be represented as follows:

```
unsigned int multiply(unsigned int multiplier, unsigned int multiplicand) {
    unsigned int product = 0;
    while (multiplier != 0) {
        if ((multiplier & 1) != 0) {
            product = product + multiplicand;
        }
        multiplier = multiplier >> 1;
        multiplicand = multiplicand << 1;
    }
    return product;
}

```

This function performs the multiplication of two unsigned ints without the operator "\*".
However it does not work with floats because a float is composed of three parts:

[IEEE 754 single-precision binary floating-point format](http://i.stack.imgur.com/tPPeM.jpg)

These parts can be isolated as follows:

```
#include <stdio.h>
typedef union {
    float f;
    struct {
        unsigned int mantisa : 23;
        unsigned int exponent : 8;
        unsigned int sign : 1;
    } parts;
} float_cast;

int main() {
    float_cast d1;
    d1.f = 0.15625;
    printf("sign = %x\n",d1.parts.sign);
    printf("exponent = %x\n",d1.parts.exponent);
    printf("mantisa = %x\n",d1.parts.mantisa);
    return 0;
}

```

With the parts separated as ints I can manipulate the bits. But how to make a function that multiplies the parts of a float?

Thanks in advance