## Tuesday, July 23, 2013

### Int to Bin v0.4

/*Here's my first go at creating a int-to-binary convert using templates for an array class.  My goal is to create a display to show how bitwise operations affect binary numbers.

I solved it, but I harvested (read found/stole) the bitwise code, and I'm not exactly sure how.why it works, though it is very intelligent code in my opinion.  I will mark the stolen code and the source below;
(0.3 has a few corrections to put the binary print out in the right order) */

/* I have updated the code with an explanation as to how the bitwise evaluation works, now that I understand it myself.  I also tightened up the code in the actual assignment, removing the if statement and replacing it with a direction evalution (x&1)/assignment.*/

#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T>
class array{
T* val;
int _leng;
public:
array(int l):_leng(l){
val=new T[_leng];
};
~array(){
delete[] val;
};
T& operator[](int index){
return val[index];
};
int leng(){return _leng;}
void disp(){
for(int i=_leng;i>=0;i--){
cout<<(*this)[i];
}
};
};

// toBits operates as thus: k is the value of val right-shifted by c.  With fir this c begins as 8
// and val is 15(or 1111bin).  Since a right shift of 8 places pushes the values clear, k==0.  When
// k is compared to bin value of one(1bin), this results in a false, so 0 is assigned to fir.
// Next c==7, bit shifting right 7 places.  This is still too far, so the same assignment happens.
// So it goes until c==3.  Once we shift the value only 3 places, the comparison (& operator) evals
// to true, so fir is assigned 1.  This repeats until c==0, when k==true and the loop is complete.
// Thus, the fir.disp() feedback 00001111.
// Now lets look at sec: 16(or 10011bin) runs to c==4.  Here, when the number is shifted
// k==1, and is assigned to fir.  When it is shifted by 3 places, we can see (if we pick the number
// in binary expression) the value is 0, and assigned as such.

void toBits(array<bool>fir,int val){
for (int c = fir.leng(); c >= 0; c--){
// Everything from here to...
int k,n;
k = val >> c;
fir[c]=k&1;//except this
// ...here all comes from this source: http://www.programmingsimplified.com/c/source-code/c-program-convert-decimal-to-binary, save for some minor modifications to fit the code.
}
fir.disp();
}
int main(){
array<bool>fir(8);
toBits(fir,4);
int en=0;
cin>>en;
return 0;
}