public OthelloBoardBinary placeDisk(String position){
        long binPosition = positionStringToBin(position);
        byte binFlippableDirection = binCanFlipDirection(binPosition);

        byte UPPER_LEFT  = (byte)0x80;
        byte UPPER       = (byte)0x40;
        byte UPPER_RIGHT = (byte)0x20;
        byte LEFT        = (byte)0x10;
        byte RIGHT       = (byte)0x08;
        byte LOWER_LEFT  = (byte)0x04;
        byte LOWER       = (byte)0x02;
        byte LOWER_RIGHT = (byte)0x01;

        // flip disks of each direction
        if( (binFlippableDirection & UPPER_LEFT) != 0 )
            flipDiagonal(binPosition, false, false);
        if( (binFlippableDirection & UPPER) != 0 )
            flipVertical(binPosition, false);
        if( (binFlippableDirection & UPPER_RIGHT) != 0 )
            flipDiagonal(binPosition, true, false);
        if( (binFlippableDirection & LEFT) != 0 )
            flipHorizontal(binPosition, false);
        if( (binFlippableDirection & RIGHT) != 0 )
            flipHorizontal(binPosition, true);
        if( (binFlippableDirection & LOWER_LEFT) != 0 )
            flipDiagonal(binPosition, false, true);
        if( (binFlippableDirection & LOWER) != 0 )
            flipVertical(binPosition, true);
        if( (binFlippableDirection & LOWER_RIGHT) != 0 )
            flipDiagonal(binPosition, true, true);

        // place disk
        binHasDisk = binHasDisk | binPosition;
        binIsBlack = binFlippedDiskOf(binPosition);

        this.isBattingFirstTurn = !this.isBattingFirstTurn;
        return this;
    }