نظام العد الثنائي و عملياته

    • نظام العد الثنائي و عملياته



      كيف نحول من نظام العد العشري و إلى نظام العد الثنائي

      نفرض بأن لدينا العدد 100 و نريد أن نقوم بتحويله إلى النظام الثنائي

      هناك طريقة سهلة لهذه العملية و هي

      أن نقوم بالقسمة على العدد إثنين 2 حتى نصل لقيمة أقل من الواحد
      لو أعطانا ناتج القسمة عداد بكسر عشري نقوم بتمثيله بنظام العد الثائي بواحد
      إما إن كان ناتج القسمة بدون كسر عشري فنقوم بتمثيلة على نظام العد الثنائي
      بصفر فكما نعلم بأن العد الثنائي يحمل رقمين الصفر و الواحد

      نبداء بالقسمة 100 على 2 تساوي 50

      سنقوم الآن بتمثيل ناتج القسمة على الثنائي بصفر
      نضيف من اليمين و إلى اليسار
      0

      الآن سنقوم بقسمة الناتج 50 من جديد على 2 تساوي 25
      سنمثل هذا الناتج أيضا بصفر من اليمين و إلى اليسار
      00

      الآن سنقوم بقسمة الناتج 25 من جديد على 2 تساوي 12.5
      الناتج يشمل على كسر عشري إذا سنمثل ناتج القسمة بالعدد 1
      نضيف من اليمين و إلى اليسار واحد ليصبح الناتج
      100

      نزيل الكسر العشري من ناتج القسمة ليكون 12 بدلا من 12.5
      ثم من بعد نقسمه على إثنين ليكون ناتج القسمة 6
      الناتج لا يشمل على كسر عشري بالتالي سنقوم بتمثيله بصفر
      نضيف صفر من اليمين و إلى اليسار
      0100

      من جديد نقسم العدد الناتج 6 على 2 ليكون الناتج 3 الناتج بدون كسر
      عشري لذالك سنمثله بالعدد صفر و من اليمين و إلى اليسار ليكون الناتج
      00100

      من جديد نقسم الناتج 3 على إثنين ليكون الناتج 1.5 الناتج يشمل على كسر
      عشري لذالك سنمثله بالعدد واحد ليكون ناتج النضام الثنائي و من اليمين و إلى
      اليسار
      100100

      نزيل من ناتج القسمة الكسر العشري ليكون واحد لا بد من قسمته على إثنين ليكون
      ناتج القسمة خمسه من عشرة و هووه كسر عشري لذالك سنمثله بالرقم واحد
      و إلى هنا وصلنا لقيمة أقل من الواحد و إنتهة عملية التحويل من العشري و إلى
      الثنائي ليكون الناتج الأخير
      1100100

      الآن سنقوم بالتحويل من الثنائي و إلى العشري نأخذ الناتج السابق

      1100100

      نذهب لأول خانة على اليمين لو كانت صفر نضع صفر لوكانت واحد نضع واحد
      الخانة صفر لذالك سنضع صفر

      0
      نذهب للخانة الثانية على اليمين لو كانت واحد نضع إثنين لو كان صفر نضع صفر
      الخانة صفر لذالك سنضع صفر

      0 + 0

      نذهب للخانة الثالثة لو كانت 1 نقوم بضرب الإثنين في نفسها مرة واحدة و نضع
      الناتج لوكانت صفر نضع صفر الخانة الثالثة واحد إذا سنضرب الإثنين في نفسها
      مرة واحدة كتالي

      0 + 0 + (2 *2)

      نذهب للخانة الرابعة من اليمين لوكانت واحد نضرب الإثنين في نفسها مرتين و نضع
      الناتج لو كانت الخانة صفر نضع صفر الخانة صفر لذالك سنضع صفر كتالي

      0 + 0 + (2 *2) + 0

      نذهب للخانة الخامسة من اليمين لوكانت صفر نضع صفر لوكان واحد نضرب
      الإثنين في نفسها ثلاث مرات الخانة صفر لذالك سنضع صفر كتالي

      0 + 0 + (2 *2) + 0 + 0

      نذهب للخانة السادسة على اليمين لو كانت واحد نضرب الإثنين في نفسها أربع
      مرات و نضع الناتج لو كانت صفر نضع صفر الخانة السادسة واحد لذالك
      سنضرب الإثنين في نفسها أربع مرات ونضع الناتج كتالي

      0 + 0 + (2 *2) + 0 + 0 +(2*2*2*2*2)

      نذهب للخانة السابعة من اليمين لو كانت واحد نضرب الإثنين في نفسها خمس
      مرات ونضع الناتج لو كانت صفر نضع صفر الخانة السابعة ممثلة بواحد
      لذالك سنضع ناتج ضرب الإثنين في نفسها خمس مرات كتالي

      0 + 0 + (2 *2) + 0 + 0 + (2*2*2*2*2) + (2*2*2*2*2*2)

      نحسب ناتج الضرب كتالي

      0 + 0 + 4 + 0 + 0 + 32 + 64

      الآن نحسب ناتج الجمع ليكون الناتج 100 و بذالك تم التحويل من الثانئي
      و إلى العشري


      بعض العمليات البرمجية و تسمى Operators Compared تعتمد في طرقها
      بإدخل العد الثنائي في عمليات منطقية معروفة و تستخدم هذه العمليلت في التشفير
      أو يدخل إستخدامها في عمليات تشفير البيانات و منها

      أدخل رابط ميكروسوفت لتعرف أكثر

      http://msdn.microsoft.com/en-us/library/2hxce09y(VS.71).aspx


      Bitwise-AND &

      Bitwise-exclusive-OR ^

      Bitwise-inclusive-OR |

      وهذا كود يعطيك نتائج هذه العمليات قمت بتصميمه لمن يريد الإستفادة منه

      هذا على السي بلس 6 مكتبة mfc
      وفي الأخير على
      Autoit
      في أمان الله

      PHP كود المصدر

      1. // operationDlg.cpp : implementation file
      2. //
      3. #include "stdafx.h"
      4. #include "operation.h"
      5. #include "operationDlg.h"
      6. #ifdef _DEBUG
      7. #define new DEBUG_NEW
      8. #undef THIS_FILE
      9. static char THIS_FILE[] = __FILE__;
      10. #endif
      11. CString Twos(int A);
      12. CString StrIsInt(float C);
      13. CString StrIsFloat(float C);
      14. int _POW(int X , int Y);
      15. int Tens(CString B);
      16. int Bit_AND(int value1, int value2);
      17. int Bit_OR(int value1, int value2);
      18. int Bit_XOR(int value1, int value2);
      19. /////////////////////////////////////////////////////////////////////////////
      20. // COperationDlg dialog
      21. COperationDlg::COperationDlg(CWnd* pParent /*=NULL*/)
      22. : CDialog(COperationDlg::IDD, pParent)
      23. {
      24. //{{AFX_DATA_INIT(COperationDlg)
      25. // NOTE: the ClassWizard will add member initialization here
      26. //}}AFX_DATA_INIT
      27. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
      28. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
      29. }
      30. void COperationDlg::DoDataExchange(CDataExchange* pDX)
      31. {
      32. CDialog::DoDataExchange(pDX);
      33. //{{AFX_DATA_MAP(COperationDlg)
      34. // NOTE: the ClassWizard will add DDX and DDV calls here
      35. //}}AFX_DATA_MAP
      36. }
      37. BEGIN_MESSAGE_MAP(COperationDlg, CDialog)
      38. //{{AFX_MSG_MAP(COperationDlg)
      39. ON_WM_PAINT()
      40. ON_WM_QUERYDRAGICON()
      41. ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
      42. //}}AFX_MSG_MAP
      43. END_MESSAGE_MAP()
      44. /////////////////////////////////////////////////////////////////////////////
      45. // COperationDlg message handlers
      46. BOOL COperationDlg::OnInitDialog()
      47. {
      48. CDialog::OnInitDialog();
      49. // Set the icon for this dialog. The framework does this automatically
      50. // when the application's main window is not a dialog
      51. SetIcon(m_hIcon, TRUE); // Set big icon
      52. SetIcon(m_hIcon, FALSE); // Set small icon
      53. // TODO: Add extra initialization here
      54. return TRUE; // return TRUE unless you set the focus to a control
      55. }
      56. // If you add a minimize button to your dialog, you will need the code below
      57. // to draw the icon. For MFC applications using the document/view model,
      58. // this is automatically done for you by the framework.
      59. void COperationDlg::OnPaint()
      60. {
      61. if (IsIconic())
      62. {
      63. CPaintDC dc(this); // device context for painting
      64. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
      65. // Center icon in client rectangle
      66. int cxIcon = GetSystemMetrics(SM_CXICON);
      67. int cyIcon = GetSystemMetrics(SM_CYICON);
      68. CRect rect;
      69. GetClientRect(&rect);
      70. int x = (rect.Width() - cxIcon + 1) / 2;
      71. int y = (rect.Height() - cyIcon + 1) / 2;
      72. // Draw the icon
      73. dc.DrawIcon(x, y, m_hIcon);
      74. }
      75. else
      76. {
      77. CDialog::OnPaint();
      78. }
      79. }
      80. // The system calls this to obtain the cursor to display while the user drags
      81. // the minimized window.
      82. HCURSOR COperationDlg::OnQueryDragIcon()
      83. {
      84. return (HCURSOR) m_hIcon;
      85. }
      86. void COperationDlg::OnButton1()
      87. {
      88. CFile file;
      89. file.Open("fff.txt", CFile::modeCreate|CFile::modeWrite);
      90. CString StrResult = "";
      91. CString StrResult2 = "";
      92. for (int I = 1; I <= 500; I++)
      93. {
      94. StrResult2.Insert(StrResult2.GetLength(),"Bit_AND(+");
      95. StrResult = "";
      96. StrResult.Format(_T("%d"), I);
      97. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      98. StrResult2.Insert(StrResult2.GetLength()," , +");
      99. StrResult = "";
      100. StrResult.Format(_T("%d"), (I + 5));
      101. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      102. StrResult2.Insert(StrResult2.GetLength(),") ==>");
      103. StrResult = "";
      104. StrResult.Format(_T("%d"), Bit_AND(I, (I + 5)));
      105. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      106. StrResult2.Insert(StrResult2.GetLength()," ==> ");
      107. StrResult2.Insert(StrResult2.GetLength(),"( +");
      108. StrResult = "";
      109. StrResult.Format(_T("%d"), I);
      110. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      111. StrResult2.Insert(StrResult2.GetLength()," & +");
      112. StrResult = "";
      113. StrResult.Format(_T("%d"), (I + 5));
      114. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      115. StrResult2.Insert(StrResult2.GetLength()," ) ==> ");
      116. StrResult.Format(_T("%d"), I & (I + 5));
      117. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      118. StrResult2.Insert(StrResult2.GetLength(),(char) 13);
      119. StrResult2.Insert(StrResult2.GetLength(),(char) 10);
      120. }
      121. for (I = 1; I <= 500; I++)
      122. {
      123. StrResult2.Insert(StrResult2.GetLength(),"Bit_AND(-");
      124. StrResult = "";
      125. StrResult.Format(_T("%d"), I);
      126. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      127. StrResult2.Insert(StrResult2.GetLength()," , -");
      128. StrResult = "";
      129. StrResult.Format(_T("%d"), (I + 5));
      130. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      131. StrResult2.Insert(StrResult2.GetLength(),") ==>");
      132. StrResult = "";
      133. StrResult.Format(_T("%d"), Bit_AND(-I, -(I + 5)));
      134. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      135. StrResult2.Insert(StrResult2.GetLength()," ==> ");
      136. StrResult2.Insert(StrResult2.GetLength(),"( -");
      137. StrResult = "";
      138. StrResult.Format(_T("%d"), I);
      139. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      140. StrResult2.Insert(StrResult2.GetLength()," & -");
      141. StrResult = "";
      142. StrResult.Format(_T("%d"), (I + 5));
      143. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      144. StrResult2.Insert(StrResult2.GetLength()," ) ==> ");
      145. StrResult.Format(_T("%d"), -I & -(I + 5));
      146. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      147. StrResult2.Insert(StrResult2.GetLength(),(char) 13);
      148. StrResult2.Insert(StrResult2.GetLength(),(char) 10);
      149. }
      150. for (I = 1; I <= 500; I++)
      151. {
      152. StrResult2.Insert(StrResult2.GetLength(),"Bit_AND(-");
      153. StrResult = "";
      154. StrResult.Format(_T("%d"), I);
      155. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      156. StrResult2.Insert(StrResult2.GetLength()," , +");
      157. StrResult = "";
      158. StrResult.Format(_T("%d"), (I + 5));
      159. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      160. StrResult2.Insert(StrResult2.GetLength(),") ==>");
      161. StrResult = "";
      162. StrResult.Format(_T("%d"), Bit_AND(-I, (I + 5)));
      163. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      164. StrResult2.Insert(StrResult2.GetLength()," ==> ");
      165. StrResult2.Insert(StrResult2.GetLength(),"( -");
      166. StrResult = "";
      167. StrResult.Format(_T("%d"), I);
      168. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      169. StrResult2.Insert(StrResult2.GetLength()," & +");
      170. StrResult = "";
      171. StrResult.Format(_T("%d"), (I + 5));
      172. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      173. StrResult2.Insert(StrResult2.GetLength()," ) ==> ");
      174. StrResult.Format(_T("%d"), -I & (I + 5));
      175. StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
      176. StrResult2.Insert(StrResult2.GetLength(),(char) 13);
      177. StrResult2.Insert(StrResult2.GetLength(),(char) 10);
      178. }
      179. file.Write(StrResult2.GetBuffer(0),StrResult2.GetLength());
      180. }
      181. int Bit_AND(int value1, int value2)
      182. {
      183. CString TXT , ALLTXT;
      184. CString A = Twos(value1); //; convert Form Tens To Twos
      185. CString B = Twos(value2); //; convert Form Tens To Twos
      186. int Slen1 = strlen(A) - strlen(B);
      187. int Slen2 = strlen(B) - strlen(A);
      188. if (strlen(A) > strlen(B)) ;
      189. {
      190. for (int I = 1; I<= (Slen1); I++)
      191. {
      192. if (value2 >= 0) // + value2 Or value2 = 0
      193. {
      194. B = "0" + B;
      195. } else { //; - value2
      196. B = "1" + B;
      197. }}
      198. }
      199. if (strlen(B) > strlen(A))
      200. {
      201. for (int I = 1; I <= (Slen2); I++)
      202. {
      203. if (value1 >= 0) // + value1 Or value1 = 0
      204. {
      205. A = "0" + A;
      206. } else { // ; - value2
      207. A = "1" + A;
      208. }}
      209. }
      210. for (int M=A.GetLength() ;M>=1;M--)
      211. {
      212. CString Str1 = A.Left(M).Right(1);
      213. CString Str2 = B.Left(M).Right(1);
      214. if ((value1 < 0) && (value2 < 0)) //operation ==> (-,-) // العملية على ==> (-,-)
      215. {
      216. // TXT = StrIsInt(C) + TXT; ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      217. // Look Func Twos
      218. // في حالة كان الرقم سالب نحوله لرقم موجب ثم نطرح منه واحد لأن ناتج الطرح بنفس قيمة الرقم سالبا
      219. //Twos أنظر الوظيفة
      220. if (Str1 + Str2 == (CString) "11") TXT = "0";
      221. else if (Str1 + Str2 == (CString) "00") TXT = "1";
      222. else if (Str1 + Str2 == (CString) "10") TXT = "1";
      223. else if (Str1 + Str2 == (CString) "01") TXT = "1";
      224. } else { //operation ==> (-,+) Or (+,-) Or (+,+) //No sign bit Or sign bit = 0
      225. // في هذا الإحتمال إلسي تكون النتائج موجبة وذلك بسبب نتائج العملية و التي تعطي قيمة
      226. // موجبة للمتمم و أيضا الإحتمال الأخر و هوه إجراء العملية على عدين موجبين
      227. if (Str1 + Str2 == (CString) "11") TXT = "1";
      228. else if (Str1 + Str2 == (CString) "00") TXT = "0";
      229. else if (Str1 + Str2 == (CString) "10") TXT = "0";
      230. else if (Str1 + Str2 == (CString) "01") TXT = "0";
      231. }
      232. ALLTXT = TXT + ALLTXT;
      233. }
      234. if ((value1 < 0) && (value2 < 0)) // ; sign bit bitwise And (signbit ,signbit) / (1 And 1) = 1
      235. {
      236. // في هذا الإحتمال الوحيد بهذه العملية يكون الناتج سالبا و بما أن المتمم يكون في الخانة الأولى
      237. // اليمنى في نظام العدد اثنائي و لا يمكن إلا أن يكون مساويا للواحدفبذالك يمكننا أظافته لنظام العد
      238. // العشري من بعد تحويل الثنائي للعشري
      239. return (- (Tens(ALLTXT) + 1)); //; convert From Twos To Tens And Add 1 For sign bit
      240. } else {
      241. return Tens(ALLTXT); //; convert From Twos To Tens //No sign bit Or sign bit = 0
      242. }
      243. }
      244. int Bit_OR(int value1, int value2)
      245. {
      246. CString TXT , ALLTXT;
      247. CString A = Twos(value1); //; convert Form Tens To Twos
      248. CString B = Twos(value2); //; convert Form Tens To Twos
      249. int Slen1 = strlen(A) - strlen(B);
      250. int Slen2 = strlen(B) - strlen(A);
      251. if (strlen(A) > strlen(B)) ;
      252. {
      253. for (int I = 1; I <= (Slen1); I++)
      254. {
      255. if (value2 >= 0) // + value2 Or value2 = 0
      256. {
      257. B = "0" + B;
      258. } else { //; - value2
      259. B = "1" + B;
      260. }}
      261. }
      262. if (strlen(B) > strlen(A))
      263. {
      264. for (int I = 1; I <= (Slen2); I++)
      265. {
      266. if (value1 >= 0) // + value1 Or value1 = 0
      267. {
      268. A = "0" + A;
      269. } else { // ; - value2
      270. A = "1" + A;
      271. }}
      272. }
      273. for (int M=A.GetLength();M>=1;M--)
      274. {
      275. CString Str1 = A.Left(M).Right(1);
      276. CString Str2 = B.Left(M).Right(1);
      277. if ((value1 < 0 && value2 >= 0) || (value2 < 0 && value1 >= 0) || (value1 < 0 && value2 < 0))
      278. {
      279. // operation ==> (-,+) Or (+,-) Or (-,-)
      280. // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      281. // Look Func Twos
      282. if (Str1 + Str2 == (CString) "11") TXT = "0";
      283. else if (Str1 + Str2 == (CString) "00") TXT = "1";
      284. else if (Str1 + Str2 == (CString) "10") TXT = "0";
      285. else if (Str1 + Str2 == (CString) "01") TXT = "0";
      286. } else { //operation ==> (+,+) //No sign bit
      287. if (Str1 + Str2 == (CString) "11") TXT = "1";
      288. else if (Str1 + Str2 == (CString) "00") TXT = "0";
      289. else if (Str1 + Str2 == (CString) "10") TXT = "1";
      290. else if (Str1 + Str2 == (CString) "01") TXT = "1";
      291. }
      292. ALLTXT = TXT + ALLTXT;
      293. }
      294. if ((value1 < 0 && value2 >= 0) || (value2 < 0 && value1 >= 0) || (value1 < 0 && value2 < 0))
      295. {
      296. // sign bit bitwise OR (signbit OR Number) (Number OR signbit)
      297. //(signbit OR signbit) / (1 OR 1) = 1 / (1 OR 0) = 1 (0 OR 1) = 1
      298. // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      299. // Look Func Twos
      300. return (- (Tens(ALLTXT) + 1)); //; convert From Twos To Tens And Add 1 For sign bit
      301. } else {
      302. return Tens(ALLTXT); //; convert From Twos To Tens //No sign bit
      303. }
      304. }
      305. int Bit_XOR(int value1, int value2)
      306. {
      307. CString TXT , ALLTXT;
      308. CString A = Twos(value1); //; convert Form Tens To Twos
      309. CString B = Twos(value2); //; convert Form Tens To Twos
      310. int Slen1 = strlen(A) - strlen(B);
      311. int Slen2 = strlen(B) - strlen(A);
      312. if (strlen(A) > strlen(B)) ;
      313. {
      314. for (int I = 1; I <= (Slen1); I++)
      315. {
      316. if (value2 >= 0) // + value2 Or value2 = 0
      317. {
      318. B = "0" + B;
      319. } else { //; - value2
      320. B = "1" + B;
      321. }}
      322. }
      323. if (strlen(B) > strlen(A))
      324. {
      325. for (int I = 1; I <= (Slen2); I++)
      326. {
      327. if (value1 >= 0) // + value1 Or value1 = 0
      328. {
      329. A = "0" + A;
      330. } else { // ; - value2
      331. A = "1" + A;
      332. }}
      333. }
      334. for (int M=A.GetLength();M>=1;M--)
      335. {
      336. CString Str1 = A.Left(M).Right(1);
      337. CString Str2 = B.Left(M).Right(1);
      338. if ((value1 < 0 && value2 > 0) || (value2 < 0 && value1 > 0))
      339. {
      340. // operation ==> (-,+) Or (+,-)
      341. // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      342. // Look Func Twos
      343. if (Str1 + Str2 == (CString) "11") TXT = "1";
      344. else if (Str1 + Str2 == (CString) "00") TXT = "1";
      345. else if (Str1 + Str2 == (CString) "10") TXT = "0";
      346. else if (Str1 + Str2 == (CString) "01") TXT = "0";
      347. } else { //operation ==> (+,+) (-,-) // No sign bit Or sign bit = 0
      348. if (Str1 + Str2 == (CString) "11") TXT = "0";
      349. else if (Str1 + Str2 == (CString) "00") TXT = "0";
      350. else if (Str1 + Str2 == (CString) "10") TXT = "1";
      351. else if (Str1 + Str2 == (CString) "01") TXT = "1";
      352. }
      353. ALLTXT = TXT + ALLTXT;
      354. }
      355. if ((value1 < 0 && value2 > 0) || (value2 < 0 && value1 > 0))
      356. {
      357. //; sign bit bitwise exclusive OR (signbit XOR Number) (Number XOR signbit) (1 XOR 0) = 1 (0 XOR 1) = 1
      358. // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      359. // Look Func Twos
      360. return (- (Tens(ALLTXT) + 1)); //; convert From Twos To Tens And Add 1 For sign bit
      361. } else {
      362. return Tens(ALLTXT); //; convert From Twos To Tens //No sign bit Or sign bit = 0
      363. }
      364. }
      365. CString Twos(int A) //; convert Form Tens To Twos
      366. {
      367. float C = A;
      368. CString TXT = "";
      369. if(A < 0) C = (abs(A) - 1); //; -A = (+A - 1) Look bitwise NOT // bitwise NOT أنظر
      370. // في حالة كان الرقم سالب نحوله لرقم موجب ثم نطرح منه واحد لأن ناتج الطرح بنفس قيمة الرقم سالبا
      371. do
      372. {
      373. C = (C / 2); // ; / int($C) // نقوم بالقسمة لتحويل لنظام العد الثنائي
      374. if(A < 0) // ; if -A
      375. {
      376. TXT = StrIsInt(C) + TXT; //; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      377. // نحول ناتج عملية الطرح عكسيا ليصبح عددا موجبا لندخله في العمليات على أساس أنه موجب
      378. } else { // ; Else + A Or 0
      379. TXT = StrIsFloat(C) + TXT; //; convert Form +A To Twos +A
      380. // في حالة كان الرقم موجبا نحوله مباشرة لنظام العد الثائي ليدخل في العمليات و هووه موجب
      381. }
      382. C = int(C);
      383. } while (C >= 1);
      384. return TXT;
      385. }
      386. int Tens(CString B) // convert From Twos To Tens
      387. {
      388. int D =0;
      389. int C =0;
      390. for (int M=B.GetLength();M>=1;M--)
      391. {
      392. D += ( _ttoi(B.Left(M).Right(1)) * _POW(2 , C) ); //; convert From Twos To Tens
      393. C +=1;
      394. }
      395. return D;
      396. }
      397. CString StrIsInt(float C)
      398. {
      399. CString iResult = "";
      400. iResult.Format(_T("%g"), C);
      401. if (iResult.Find(".",1) == -1)
      402. return "1";
      403. else
      404. return "0";
      405. }
      406. CString StrIsFloat(float C)
      407. {
      408. CString iResult = "";
      409. iResult.Format(_T("%g"), C);
      410. if (iResult.Find(".",1) == -1)
      411. return "0";
      412. else
      413. return "1";
      414. }
      415. int _POW(int X , int Y)
      416. {
      417. int Z = 1;
      418. for (int M = 1; M <= Y; M++)
      419. {
      420. Z *= X;
      421. }
      422. return Z;
      423. }
      عرض الكل


      وهذا على لغة

      Autoit



      PHP كود المصدر

      1. $file = FileOpen("operation.txt", 1)
      2. for $i = 1 To 100 Step 1
      3. $Line1 = "Autoit BitAND ==> " & BitAND($i , $i + 5) & " FuncBit_AND ==> " & Bit_AND($i, $i + 5) & _
      4. " NO ==> ( " & $i & " , " & $i + 5 & " )"
      5. $Line2 = "Autoit BitAND ==> " & BitAND(- $i , - ($i + 5)) & " FuncBit_AND ==> " & Bit_AND(- $i, - ($i + 5)) & _
      6. " NO ==> ( " & - $i & " , " & - ($i + 5) & " )"
      7. $Line3 = "Autoit BitAND ==> " & BitAND($i , - ($i + 5)) & " FuncBit_AND ==> " & Bit_AND($i, - ($i + 5)) & _
      8. " NO ==> ( " & $i & " , " & - ($i + 5) & " )"
      9. $Line4 = "Autoit BitAND ==> " & BitAND(- $i , ($i + 5)) & " FuncBit_AND ==> " & Bit_AND(- $i, ($i + 5)) & _
      10. " NO ==> ( " & - $i & " , " & ($i + 5) & " )"
      11. FileWriteLine($file,$Line1)
      12. FileWriteLine($file,$Line2)
      13. FileWriteLine($file,$Line3)
      14. FileWriteLine($file,$Line4)
      15. $Line1 = "Autoit BitOR ==> " & BitOR($i , $i + 5) & " FuncBit_OR ==> " & Bit_OR($i, $i + 5) & _
      16. " NO ==> ( " & $i & " , " & $i + 5 & " )"
      17. $Line2 = "Autoit BitOR ==> " & BitOR(- $i , - ($i + 5)) & " FuncBit_OR ==> " & Bit_OR(- $i, - ($i + 5)) & _
      18. " NO ==> ( " & - $i & " , " & - ($i + 5) & " )"
      19. $Line3 = "Autoit BitOR ==> " & BitOR($i , - ($i + 5)) & " FuncBit_OR ==> " & Bit_OR($i, - ($i + 5)) & _
      20. " NO ==> ( " & $i & " , " & - ($i + 5) & " )"
      21. $Line4 = "Autoit BitOR ==> " & BitOR(- $i , ($i + 5)) & " FuncBit_OR ==> " & Bit_OR(- $i, ($i + 5)) & _
      22. " NO ==> ( " & - $i & " , " & ($i + 5) & " )"
      23. FileWriteLine($file,$Line1)
      24. FileWriteLine($file,$Line2)
      25. FileWriteLine($file,$Line3)
      26. FileWriteLine($file,$Line4)
      27. $Line1 = "Autoit BitXOR ==> " & BitXOR($i , $i + 5) & " FuncBit_XOR ==> " & Bit_XOR($i, $i + 5) & _
      28. " NO ==> ( " & $i & " , " & $i + 5 & " )"
      29. $Line2 = "Autoit BitXOR ==> " & BitXOR(- $i , - ($i + 5)) & " FuncBit_XOR ==> " & Bit_XOR(- $i, - ($i + 5)) & _
      30. " NO ==> ( " & - $i & " , " & - ($i + 5) & " )"
      31. $Line3 = "Autoit BitXOR ==> " & BitXOR($i , - ($i + 5)) & " FuncBit_XOR ==> " & Bit_XOR($i, - ($i + 5)) & _
      32. " NO ==> ( " & $i & " , " & - ($i + 5) & " )"
      33. $Line4 = "Autoit BitXOR ==> " & BitXOR(- $i , ($i + 5)) & " FuncBit_XOR ==> " & Bit_XOR(- $i, ($i + 5)) & _
      34. " NO ==> ( " & - $i & " , " & ($i + 5) & " )"
      35. FileWriteLine($file,$Line1)
      36. FileWriteLine($file,$Line2)
      37. FileWriteLine($file,$Line3)
      38. FileWriteLine($file,$Line4)
      39. Next
      40. Func Bit_AND($value1, $value2 , $value = '')
      41. $BOOL = IsNumber($value) Or StringStripWS($value, 8) = ''
      42. if IsNumber($value1) And IsNumber($value2) And ($BOOL) Then
      43. Dim $TXT = "" ,$TXT2 = ""
      44. $A = Twos($value1) ; convert Form Tens To Twos
      45. $B = Twos($value2) ; convert Form Tens To Twos
      46. If StringLen($A) > StringLen($B) Then
      47. For $I = 1 To StringLen($A) - StringLen($B) Step 1
      48. Select
      49. Case $value2 >= 0 ; + value2 Or value2 = 0
      50. $B = "0" & $B
      51. Case $value2 < 0 ; - value2
      52. $B = "1" & $B
      53. EndSelect
      54. Next
      55. ElseIf StringLen($B) > StringLen($A) Then
      56. For $I = 1 To StringLen($B) - StringLen($A) Step 1
      57. Select
      58. Case $value1 >= 0 ; + value1 Or value1 = 0
      59. $A = "0" & $A
      60. Case $value1 < 0 ; - value2
      61. $A = "1" & $A
      62. EndSelect
      63. Next
      64. EndIf
      65. $A = StringSplit($A,"")
      66. $B = StringSplit($B,"")
      67. for $I = $A[0] To 1 Step -1
      68. Select
      69. Case $value1 < 0 And $value2 < 0
      70. ;Case operation ==> (-,-)
      71. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      72. Select
      73. Case $A[$i] & $B[$i] = '11'
      74. $TXT = '0'
      75. Case $A[$i] & $B[$i] = '00'
      76. $TXT = '1'
      77. Case $A[$i] & $B[$i] = '10'
      78. $TXT = '1'
      79. Case $A[$i] & $B[$i] = '01'
      80. $TXT = '1'
      81. EndSelect
      82. Case Else
      83. ;Case operation ==> (-,+) Or (+,-) Or (+,+) No sign bit Or sign bit = 0
      84. Select
      85. Case $A[$i] & $B[$i] = '11'
      86. $TXT = '1'
      87. Case $A[$i] & $B[$i] = '00'
      88. $TXT = '0'
      89. Case $A[$i] & $B[$i] = '10'
      90. $TXT = '0'
      91. Case $A[$i] & $B[$i] = '01'
      92. $TXT = '0'
      93. EndSelect
      94. EndSelect
      95. $TXT2 = $TXT & $TXT2
      96. Next
      97. $E = StringSplit($TXT2,"")
      98. Select
      99. Case StringStripWS($value, 8) = ''
      100. If ($value1 < 0 And $value2 < 0) Then ; sign bit bitwise And (signbit ,signbit) / (1 And 1) = 1
      101. Return (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
      102. Else
      103. Return Tens($E) ; convert From Twos To Tens
      104. EndIf
      105. Case StringStripWS($value, 8) <> ''
      106. If ($value1 < 0 And $value2 < 0) Then ; sign bit bitwise And (signbit ,signbit) / (1 And 1) = 1
      107. $A = (- (Tens($E) + 1)) ;; convert From Twos To Tens And Add 1 For sign bit
      108. Else
      109. $A = (Tens($E)) ; convert From Twos To Tens // No sign bit Or sign bit = 0
      110. EndIf
      111. Bit_AND($A, $value,"")
      112. EndSelect
      113. Else
      114. Return ""
      115. EndIf
      116. EndFunc
      117. Func Bit_OR($value1, $value2 , $value = '')
      118. $BOOL = IsNumber($value) Or StringStripWS($value, 8) = ''
      119. if IsNumber($value1) And IsNumber($value2) And ($BOOL) Then
      120. Dim $TXT = "" ,$TXT2 = ""
      121. $A = Twos($value1) ; convert Form Tens To Twos
      122. $B = Twos($value2) ; convert Form Tens To Twos
      123. If StringLen($A) > StringLen($B) Then
      124. For $I = 1 To StringLen($A) - StringLen($B) Step 1
      125. Select
      126. Case $value2 >= 0 ; + value2 Or value2 = 0
      127. $B = "0" & $B
      128. Case $value2 < 0 ; - value2
      129. $B = "1" & $B
      130. EndSelect
      131. Next
      132. ElseIf StringLen($B) > StringLen($A) Then
      133. For $I = 1 To StringLen($B) - StringLen($A) Step 1
      134. Select
      135. Case $value1 >= 0 ; + value1 Or value1 = 0
      136. $A = "0" & $A
      137. Case $value1 < 0 ; - value2
      138. $A = "1" & $A
      139. EndSelect
      140. Next
      141. EndIf
      142. $A = StringSplit($A,"")
      143. $B = StringSplit($B,"")
      144. for $I = $A[0] To 1 Step -1
      145. Select
      146. Case ($value1 < 0 And $value2 >= 0) Or ($value2 < 0 And $value1 >= 0) Or ($value1 < 0 And $value2 < 0)
      147. ;Case operation ==> (-,+) Or (+,-) Or (-,-)
      148. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      149. Select
      150. Case $A[$i] & $B[$i] = '11'
      151. $TXT = '0'
      152. Case $A[$i] & $B[$i] = '00'
      153. $TXT = '1'
      154. Case $A[$i] & $B[$i] = '10'
      155. $TXT = '0'
      156. Case $A[$i] & $B[$i] = '01'
      157. $TXT = '0'
      158. EndSelect
      159. Case Else ;operation ==> (+,+) No sign bit
      160. Select
      161. Case $A[$i] & $B[$i] = '11'
      162. $TXT = '1'
      163. Case $A[$i] & $B[$i] = '00'
      164. $TXT = '0'
      165. Case $A[$i] & $B[$i] = '10'
      166. $TXT = '1'
      167. Case $A[$i] & $B[$i] = '01'
      168. $TXT = '1'
      169. EndSelect
      170. EndSelect
      171. $TXT2 = $TXT & $TXT2
      172. Next
      173. $E = StringSplit($TXT2,"")
      174. Select
      175. Case StringStripWS($value, 8) = ''
      176. If ($value1 < 0 And $value2 >= 0) Or ($value2 < 0 And $value1 >= 0) Or ($value1 < 0 And $value2 < 0) Then
      177. ; sign bit bitwise OR (signbit OR Number) (Number OR signbit) (signbit OR signbit) / (1 OR 1) = 1 / (1 OR 0) = 1 (0 OR 1) = 1
      178. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      179. Return (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
      180. Else
      181. Return Tens($E) ; convert From Twos To Tens // No sign bit Or sign bit = 0
      182. EndIf
      183. Case StringStripWS($value, 8) <> ''
      184. if ($value1 < 0 And $value2 >= 0) Or ($value2 < 0 And $value1 >= 0) Or ($value1 < 0 And $value2 < 0) Then
      185. ; sign bit bitwise OR (signbit OR Number) (Number OR signbit) (signbit ,signbit) / (1 OR 1) = 1 / (1 OR 0) = 1 (0 OR 1) = 1 / (0 OR 0) = 1
      186. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      187. $A = (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
      188. Else
      189. $A = (Tens($E)) ; convert From Twos To Tens //No sign bit
      190. EndIf
      191. Bit_OR($A, $value,"")
      192. EndSelect
      193. Else
      194. Return ""
      195. EndIf
      196. EndFunc
      197. Func Bit_XOR($value1, $value2 , $value = '')
      198. $BOOL = IsNumber($value) Or StringStripWS($value, 8) = ''
      199. if IsNumber($value1) And IsNumber($value2) And ($BOOL) Then
      200. Dim $TXT = "" ,$TXT2 = ""
      201. $A = Twos($value1) ; convert Form Tens To Twos
      202. $B = Twos($value2) ; convert Form Tens To Twos
      203. If StringLen($A) > StringLen($B) Then
      204. For $I = 1 To StringLen($A) - StringLen($B) Step 1
      205. Select
      206. Case $value2 >= 0 ; + value2 Or value2 = 0
      207. $B = "0" & $B
      208. Case $value2 < 0 ; - value2
      209. $B = "1" & $B
      210. EndSelect
      211. Next
      212. ElseIf StringLen($B) > StringLen($A) Then
      213. For $I = 1 To StringLen($B) - StringLen($A) Step 1
      214. Select
      215. Case $value1 >= 0 ; + value1 Or value1 = 0
      216. $A = "0" & $A
      217. Case $value1 < 0 ; - value2
      218. $A = "1" & $A
      219. EndSelect
      220. Next
      221. EndIf
      222. $A = StringSplit($A,"")
      223. $B = StringSplit($B,"")
      224. for $I = $A[0] To 1 Step -1
      225. Select
      226. Case ($value1 < 0 And $value2 > 0) Or ($value2 < 0 And $value1 > 0)
      227. ;Case operation ==> (-,+) Or (+,-)
      228. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      229. Select
      230. Case $A[$i] & $B[$i] = '11'
      231. $TXT = '1'
      232. Case $A[$i] & $B[$i] = '00'
      233. $TXT = '1'
      234. Case $A[$i] & $B[$i] = '10'
      235. $TXT = '0'
      236. Case $A[$i] & $B[$i] = '01'
      237. $TXT = '0'
      238. EndSelect
      239. Case Else ;operation ==> (+,+) (-,-) // No sign bit Or sign bit = 0
      240. Select
      241. Case $A[$i] & $B[$i] = '11'
      242. $TXT = '0'
      243. Case $A[$i] & $B[$i] = '00'
      244. $TXT = '0'
      245. Case $A[$i] & $B[$i] = '10'
      246. $TXT = '1'
      247. Case $A[$i] & $B[$i] = '01'
      248. $TXT = '1'
      249. EndSelect
      250. EndSelect
      251. $TXT2 = $TXT & $TXT2
      252. Next
      253. $E = StringSplit($TXT2,"")
      254. Select
      255. Case StringStripWS($value, 8) = ''
      256. If ($value1 < 0 And $value2 > 0) Or ($value2 < 0 And $value1 > 0) Then
      257. ; sign bit bitwise exclusive OR (signbit XOR Number) (Number XOR signbit) (1 XOR 0) = 1 (0 XOR 1) = 1
      258. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      259. Return (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
      260. Else
      261. Return Tens($E)
      262. EndIf
      263. Case StringStripWS($value, 8) <> ''
      264. If ($value1 < 0 And $value2 > 0) Or ($value2 < 0 And $value1 > 0) Then
      265. ; sign bit bitwise exclusive OR (signbit XOR Number) (Number XOR signbit) (1 XOR 0) = 1 (0 XOR 1) = 1
      266. ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
      267. $A = (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
      268. Else
      269. $A = (Tens($E)) ; convert From Twos To Tens //No sign bit Or sign bit = 0
      270. EndIf
      271. Bit_XOR($A, $value,"")
      272. EndSelect
      273. Else
      274. Return ""
      275. EndIf
      276. EndFunc
      277. Func Twos($A) ; convert Form Tens To Twos
      278. $C = $A
      279. if($A < 0) Then $C = (abs($A) - 1) ; -A = (+A - 1) Look bitwise NOT
      280. $TXT = ""
      281. Do
      282. $C = (int($C) / 2) ; / int($C)
      283. if($A < 0) Then ; if -A
      284. $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
      285. ElseIf ($A >= 0) Then ; ElseIf + A Or 0
      286. $TXT = IsFloat($C) & $TXT ; convert Form +A To Twos +A
      287. EndIf
      288. Until(Int($C) < 1)
      289. Return $TXT
      290. EndFunc
      291. Func Tens($B) ; convert From Twos To Tens
      292. $D =0
      293. $C =0
      294. for $I = $B[0] To 1 Step -1
      295. $D += ($B[$I] * POW(2 , $C)) ; convert From Twos To Tens
      296. $C +=1
      297. Next
      298. Return $D
      299. EndFunc
      300. Func POW($X , $Y)
      301. $Z = 1
      302. For $I = 1 To $Y Step 1
      303. $Z *= $X
      304. Next
      305. Return $Z
      306. EndFunc
      عرض الكل