Advertisement
Guest User

asdasd

a guest
Jun 18th, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.17 KB | None | 0 0
  1. /*
  2. * File: main.cpp
  3. * Author: Admin
  4. *
  5. * Created on June 17, 2013, 12:06 AM
  6. */
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <sstream>
  11. using namespace std;
  12. /*
  13. code the binary class here
  14.  
  15.  
  16. */
  17. class Binary_Class
  18. {
  19. public:
  20. char bin[32]; //unsigned 32 bit binary
  21. //Binary_Class () {};
  22. bool is_zero() const
  23. {
  24. for(int i=0;i<32;i++)
  25. if(this->bin[i]==1) return false;
  26. return true;
  27. }
  28. int td()
  29. {
  30. unsigned int temp=1;
  31. unsigned int res=0;
  32. for(int i=0;i<32;i++)
  33. {
  34. if(bin[i]==1){res+=temp;}
  35. temp=temp*2;
  36. }
  37. return res;
  38. }
  39. string ts()
  40. {
  41. string temp="";
  42. for(int i=31;i>=0;i--)
  43. {
  44. if(bin[i]==0){temp+="0";}else{temp+="1";};
  45. }
  46. return temp;
  47. }
  48.  
  49. void shift_right(int sha)
  50. {
  51. int i;
  52. if(sha>0 && sha<31)
  53. for(i=0;i<32-sha;i++)
  54. {
  55. bin[i]=bin[i+sha];
  56. }
  57. for(int j=i;j<32;j++)
  58. {
  59. bin[i]=0;
  60. }
  61. }
  62. void shift_left(int sha)
  63. {
  64. int i;
  65. if(sha >0 && sha <31)
  66. for( i=31;i>=sha;i--)
  67. {
  68. bin[i]=bin[i-sha];
  69. }
  70. for(int j=i;j>=0;j--)
  71. {
  72. bin[i]=0;
  73. }
  74. }
  75. void set_bin(string inp_bin)
  76. {
  77. int index=0;
  78. if(inp_bin.length()<=32){
  79. for(string::reverse_iterator i= inp_bin.rbegin();i!=inp_bin.rend();i++)
  80. {
  81. if(*i=='1'){bin[index++]=1;}
  82. else{bin[index++]=0;}
  83. }
  84. }
  85. for(;index<32;index++)
  86. {bin[index]=0;}
  87.  
  88. }
  89. void set_dec(string inp_dec_str)
  90. {
  91. int index=0;
  92. int inp_dec;
  93. inp_dec=atoi(inp_dec_str.c_str());
  94. while(inp_dec>0)
  95. {
  96. bin[index++]=(inp_dec%2?1:0);
  97. inp_dec/=2;
  98. }
  99. for(;index<32;index++)
  100. {bin[index]=0;}
  101. }
  102. Binary_Class& operator= (const Binary_Class&);
  103. const Binary_Class operator+ (const Binary_Class&) ;
  104. const Binary_Class operator- (const Binary_Class&) ;
  105. const Binary_Class operator* (const Binary_Class&) ;
  106. const Binary_Class operator/ (const Binary_Class&) ;
  107. };
  108.  
  109. class Binary_ET_Class:public Binary_Class
  110. { public:
  111. //Binary_ET_Class () {};
  112. int to_dec()
  113. {
  114. unsigned int temp=1,res=0;
  115. for(int i=0;i<32;i++)
  116. {
  117. if(bin[i]==1){res+=temp;}
  118. temp=temp*2;
  119. }
  120. return res;
  121. }
  122. void bnot()
  123. {
  124. for(int i=0;i<32;i++)
  125. {
  126. bin[i]=bin[i] xor 1;
  127. }
  128. }
  129. Binary_ET_Class & operator= (const Binary_ET_Class& param);
  130. Binary_ET_Class operator and (Binary_ET_Class param);
  131. Binary_ET_Class operator or (Binary_ET_Class param);
  132. bool operator > (Binary_ET_Class param);
  133. bool operator < (Binary_ET_Class param);
  134. bool operator == (Binary_ET_Class param);
  135. bool operator != (Binary_ET_Class param);
  136. bool operator >= (Binary_ET_Class param);
  137. bool operator <= (Binary_ET_Class param);
  138. };
  139. /*
  140. *
  141. */
  142. Binary_Class & Binary_Class::operator= (const Binary_Class& param)
  143. {
  144. for(int i=0;i<32;i++)
  145. {
  146. bin[i]=param.bin[i];
  147. }
  148. return *this;
  149. }
  150. const Binary_Class Binary_Class::operator+ (const Binary_Class& param)
  151. {
  152. Binary_Class result;
  153. result.set_dec("0");
  154. int i, c = 0;
  155. for(i = 0; i <32 ; i++){
  156. result.bin[i] = ((bin[i] ^ param.bin[i]) ^ c); //a xor b xor c
  157. c = ((bin[i] & param.bin[i]) | (bin[i] &c)) | (param.bin[i] & c); //ab+bc+ca
  158. }
  159. result.bin[i] = c;
  160.  
  161. return result;
  162. }
  163. const Binary_Class Binary_Class::operator- (const Binary_Class& param)
  164. {
  165. Binary_Class result;
  166. Binary_Class one,onecpl;
  167. Binary_Class org=*this;
  168. one.set_dec("1");
  169. result.set_dec("0");
  170. for(int i=0;i<32;i++)
  171. {
  172. onecpl.bin[i]=param.bin[i] xor 1;
  173. }
  174. result=org+(onecpl+one);
  175. return result;
  176. }
  177. const Binary_Class Binary_Class::operator* (const Binary_Class& param)
  178. {
  179. Binary_Class temp,result;
  180. temp=*this;
  181. result.set_dec(0);
  182. for(int i=0;i<32;i++)
  183. {
  184. if(param.bin[i]==1){
  185. result=result+temp;
  186. }
  187. temp=temp+temp;
  188. }
  189. return result;
  190. }
  191. const Binary_Class Binary_Class::operator/ (const Binary_Class& param)
  192. {
  193. if(param.is_zero()){return param;};
  194. Binary_Class q,r,cmp;
  195. q.set_dec("0");
  196. r.set_dec("0");
  197. for(int i=31;i>=0;i--)
  198. {
  199. r.shift_left(1);
  200. r.bin[0]=this->bin[i];
  201. cmp=r-param;
  202. if(cmp.bin[31]==0)
  203. {
  204. r=r-param;
  205. q.bin[i]=1;
  206. }
  207. }
  208. return q;
  209. }
  210.  
  211.  
  212. // Binary_ET_Class & Binary_ET_Class::operator= (const Binary_ET_Class& param)
  213. // {
  214. // Binary_Class::operator=(param);
  215. // return *this;
  216. // }
  217.  
  218. Binary_ET_Class Binary_ET_Class::operator and (Binary_ET_Class param)
  219. {
  220. Binary_ET_Class result;
  221.  
  222. for(int i=0;i<32;i++)
  223. {
  224. result.bin[i]=this->bin[i] and param.bin[i];
  225. }
  226. return result;
  227. }
  228. Binary_ET_Class Binary_ET_Class::operator or (Binary_ET_Class param)
  229. {
  230. Binary_ET_Class result;
  231.  
  232. for(int i=0;i<32;i++)
  233. {
  234. result.bin[i]=bin[i] or param.bin[i];
  235. }
  236. return result;
  237. }
  238. bool Binary_ET_Class::operator > (Binary_ET_Class param)
  239. {
  240. bool result=false;
  241.  
  242. for(int i=0;i<32;i++)
  243. {
  244. if(bin[i]>param.bin[i])return true;
  245. }
  246. return result;
  247. }
  248. bool Binary_ET_Class::operator < (Binary_ET_Class param)
  249. {
  250. bool result=false;
  251. for(int i=0;i<32;i++)
  252. {
  253. if(bin[i]<param.bin[i])return true;
  254. }
  255. return result;
  256. }
  257. bool Binary_ET_Class::operator == (Binary_ET_Class param)
  258. {
  259. bool result=true;
  260. for(int i=0;i<32;i++)
  261. {
  262. if(bin[i]!=param.bin[i])return false;
  263. }
  264. return result;
  265. }
  266. bool Binary_ET_Class::operator != (Binary_ET_Class param)
  267. {
  268. return !(*this==param);
  269. }
  270. bool Binary_ET_Class::operator >= (Binary_ET_Class param)
  271. {
  272. return (*this==param || *this > param);
  273. }
  274. bool Binary_ET_Class::operator <= (Binary_ET_Class param)
  275. {
  276. return (*this==param || *this < param);
  277. }
  278. int main(int argc, char** argv) {
  279.  
  280. Binary_ET_Class sa,sb,sc;
  281. Binary_Class sd;
  282. sa.set_dec("10");
  283. sb.set_dec("2");
  284. sc.set_dec("0");
  285. sd=sa/sb;
  286. sa.shift_left(30);
  287. //sc=sa+sb;
  288. //sc.set_dec("0000011");
  289. cout<<"result1 :"<<sd.ts()<<"\n";
  290. cout<<"result2 :"<<(unsigned int)(sa.td());
  291. return 0;
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement