diff --git a/d02/ex01/Fixed.cpp b/d02/ex01/Fixed.cpp index 82b8f4b..00567bd 100644 --- a/d02/ex01/Fixed.cpp +++ b/d02/ex01/Fixed.cpp @@ -1,5 +1,9 @@ #include "Fixed.hpp" +/* + * function to print integers in binary + */ + void printBits(std::string before, unsigned int num) { int i = 0; @@ -12,51 +16,89 @@ void printBits(std::string before, unsigned int num) if (i % 8 == 0) std::cout << ' '; } - std::cout << "(" << num << ")" << '\n'; + std::cout << "(" << (signed int)num << ")" << '\n'; } -// default/parametric constructor -Fixed::Fixed( void ) : _value( 0 ) { +/* + * statics variables initialisation + * + * for MAX integer : + * 00000000 01111111 11111111 11111111 ( 8388607) (-1U >> (this->_frac +1)) + * <= ... >= + * 11111111 10000000 00000000 00000000 (-8388608) + * + */ + +int const Fixed::_frac = 8; +int const Fixed::_max = -1U >> (_frac +1); + +/* + * default constructor / copy constructor / destructor + */ + +Fixed::Fixed() : _value(0) { std::cout << "Default constructor called" << '\n'; return; } -// copy constructor -Fixed::Fixed( Fixed const & src ) { +Fixed::Fixed(Fixed const & src) { std::cout << "Copy constructor called" << '\n'; *this = src; return; } -// destructor Fixed::~Fixed( void ) { std::cout << "Destructor called" << '\n'; return; } -Fixed::Fixed( int integer ) { +/* + * int and float constructors + */ - std::cout << integer << '\n'; - printBits("integer : ", integer); +Fixed::Fixed(int integer) { + std::cout << "Int constructor called" << '\n'; + + if (integer < ~this->_max || integer > this->_max) + { + std::cout << "error: integer out of range" << '\n'; + return; + } + printBits("integer : ", integer); this->_value = integer << this->_frac; - printBits("this->_value : ", this->_value); + printBits("integer : ", this->_value); +} + +Fixed::Fixed(float const floater) { + std::cout << "Float constructor called" << '\n'; + + if (floater < ~this->_max || floater > this->_max) + { + std::cout << "error: float out of range" << '\n'; + return; + } + } -// assignement operator -Fixed & Fixed::operator=( Fixed const & rhs ) { +/* + * assignement operator + */ +Fixed & Fixed::operator=( Fixed const & rhs ) { std::cout << "Copy assignment operator called" << '\n'; if ( this != &rhs ) this->_value = rhs.getRawBits(); return *this; - } +/* + * other functions + */ + int Fixed::getRawBits( void ) const { std::cout << "getRawBits member function called" << '\n'; - return this->_value; } @@ -64,3 +106,7 @@ void Fixed::setRawBits( int const raw ) { this->_value = raw; } +void Fixed::toFloat( void ) const {} +int Fixed::toInt( void ) const { + return 0; +} diff --git a/d02/ex01/Fixed.hpp b/d02/ex01/Fixed.hpp index 5224527..5b5e594 100644 --- a/d02/ex01/Fixed.hpp +++ b/d02/ex01/Fixed.hpp @@ -8,21 +8,24 @@ class Fixed { public: - Fixed( void ); // default/parametric constructor - Fixed( Fixed const & src ); // copy constructor - ~Fixed( void ); // destructor - Fixed( int integer); - Fixed( float const floater ); + Fixed(void); // default/parametric constructor + Fixed(Fixed const & src); // copy constructor + ~Fixed(void); // destructor + Fixed(int integer); + Fixed(float const floater); - Fixed & operator=( Fixed const & rhs ); // assignement operator + Fixed & operator=(Fixed const & rhs); // assignement operator - int getRawBits( void ) const; - void setRawBits( int const raw ); + int getRawBits(void) const; + void setRawBits(int const raw); + void toFloat(void) const; + int toInt(void) const; private: int _value; - static int const _frac = 8; + static int const _frac; + static int const _max; }; diff --git a/d02/ex01/fixed b/d02/ex01/fixed index 7caafdb..7a4f401 100755 Binary files a/d02/ex01/fixed and b/d02/ex01/fixed differ diff --git a/d02/ex01/main.cpp b/d02/ex01/main.cpp index a191bfe..50a2890 100644 --- a/d02/ex01/main.cpp +++ b/d02/ex01/main.cpp @@ -4,16 +4,7 @@ int main( void ) { Fixed a( 1 ); - std::cout << a.getRawBits() << '\n'; - - Fixed b( 6 ); - std::cout << b.getRawBits() << '\n'; - - Fixed c( -6 ); - std::cout << c.getRawBits() << '\n'; - - Fixed d( -1 ); - std::cout << d.getRawBits() << '\n'; + Fixed const b( 1.5 ); // Fixed a; // Fixed const b( 10 );