fn mul(self, other: FixedPoint<T, UT>) -> FixedPoint<T, UT>
    {
        let bit_count = std::mem::size_of::<T>() * 8;
        let (hi, lo) = mul_whole(self.data, other.data);
        let data;

        if POINT == 0{//
            data = lo.to_signed();
        } else {
            data = (lo >> POINT).to_signed() | (hi << (bit_count - POINT));
        }
        println!("lo: {:X}, shr: {:X}", lo, (lo >> POINT).to_signed());//Debug
        println!("hi: {:X}, shl: {:X}", hi, hi << (bit_count - POINT));//Debug

        FixedPoint {
            data,
            phantom: std::marker::PhantomData
        }
    }