
كيف نحول من نظام العد العشري و إلى نظام العد الثنائي
نفرض بأن لدينا العدد 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 كود المصدر
- // operationDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "operation.h"
- #include "operationDlg.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- CString Twos(int A);
- CString StrIsInt(float C);
- CString StrIsFloat(float C);
- int _POW(int X , int Y);
- int Tens(CString B);
- int Bit_AND(int value1, int value2);
- int Bit_OR(int value1, int value2);
- int Bit_XOR(int value1, int value2);
- /////////////////////////////////////////////////////////////////////////////
- // COperationDlg dialog
- COperationDlg::COperationDlg(CWnd* pParent /*=NULL*/)
- : CDialog(COperationDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(COperationDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void COperationDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(COperationDlg)
- // NOTE: the ClassWizard will add DDX and DDV calls here
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(COperationDlg, CDialog)
- //{{AFX_MSG_MAP(COperationDlg)
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // COperationDlg message handlers
- BOOL COperationDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- // TODO: Add extra initialization here
- return TRUE; // return TRUE unless you set the focus to a control
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void COperationDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR COperationDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- void COperationDlg::OnButton1()
- {
- CFile file;
- file.Open("fff.txt", CFile::modeCreate|CFile::modeWrite);
- CString StrResult = "";
- CString StrResult2 = "";
- for (int I = 1; I <= 500; I++)
- {
- StrResult2.Insert(StrResult2.GetLength(),"Bit_AND(+");
- StrResult = "";
- StrResult.Format(_T("%d"), I);
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," , +");
- StrResult = "";
- StrResult.Format(_T("%d"), (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength(),") ==>");
- StrResult = "";
- StrResult.Format(_T("%d"), Bit_AND(I, (I + 5)));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," ==> ");
- StrResult2.Insert(StrResult2.GetLength(),"( +");
- StrResult = "";
- StrResult.Format(_T("%d"), I);
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," & +");
- StrResult = "";
- StrResult.Format(_T("%d"), (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," ) ==> ");
- StrResult.Format(_T("%d"), I & (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength(),(char) 13);
- StrResult2.Insert(StrResult2.GetLength(),(char) 10);
- }
- for (I = 1; I <= 500; I++)
- {
- StrResult2.Insert(StrResult2.GetLength(),"Bit_AND(-");
- StrResult = "";
- StrResult.Format(_T("%d"), I);
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," , -");
- StrResult = "";
- StrResult.Format(_T("%d"), (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength(),") ==>");
- StrResult = "";
- StrResult.Format(_T("%d"), Bit_AND(-I, -(I + 5)));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," ==> ");
- StrResult2.Insert(StrResult2.GetLength(),"( -");
- StrResult = "";
- StrResult.Format(_T("%d"), I);
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," & -");
- StrResult = "";
- StrResult.Format(_T("%d"), (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," ) ==> ");
- StrResult.Format(_T("%d"), -I & -(I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength(),(char) 13);
- StrResult2.Insert(StrResult2.GetLength(),(char) 10);
- }
- for (I = 1; I <= 500; I++)
- {
- StrResult2.Insert(StrResult2.GetLength(),"Bit_AND(-");
- StrResult = "";
- StrResult.Format(_T("%d"), I);
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," , +");
- StrResult = "";
- StrResult.Format(_T("%d"), (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength(),") ==>");
- StrResult = "";
- StrResult.Format(_T("%d"), Bit_AND(-I, (I + 5)));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," ==> ");
- StrResult2.Insert(StrResult2.GetLength(),"( -");
- StrResult = "";
- StrResult.Format(_T("%d"), I);
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," & +");
- StrResult = "";
- StrResult.Format(_T("%d"), (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength()," ) ==> ");
- StrResult.Format(_T("%d"), -I & (I + 5));
- StrResult2.Insert(StrResult2.GetLength(),StrResult.GetBuffer(0));
- StrResult2.Insert(StrResult2.GetLength(),(char) 13);
- StrResult2.Insert(StrResult2.GetLength(),(char) 10);
- }
- file.Write(StrResult2.GetBuffer(0),StrResult2.GetLength());
- }
- int Bit_AND(int value1, int value2)
- {
- CString TXT , ALLTXT;
- CString A = Twos(value1); //; convert Form Tens To Twos
- CString B = Twos(value2); //; convert Form Tens To Twos
- int Slen1 = strlen(A) - strlen(B);
- int Slen2 = strlen(B) - strlen(A);
- if (strlen(A) > strlen(B)) ;
- {
- for (int I = 1; I<= (Slen1); I++)
- {
- if (value2 >= 0) // + value2 Or value2 = 0
- {
- B = "0" + B;
- } else { //; - value2
- B = "1" + B;
- }}
- }
- if (strlen(B) > strlen(A))
- {
- for (int I = 1; I <= (Slen2); I++)
- {
- if (value1 >= 0) // + value1 Or value1 = 0
- {
- A = "0" + A;
- } else { // ; - value2
- A = "1" + A;
- }}
- }
- for (int M=A.GetLength() ;M>=1;M--)
- {
- CString Str1 = A.Left(M).Right(1);
- CString Str2 = B.Left(M).Right(1);
- if ((value1 < 0) && (value2 < 0)) //operation ==> (-,-) // العملية على ==> (-,-)
- {
- // TXT = StrIsInt(C) + TXT; ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- // Look Func Twos
- // في حالة كان الرقم سالب نحوله لرقم موجب ثم نطرح منه واحد لأن ناتج الطرح بنفس قيمة الرقم سالبا
- //Twos أنظر الوظيفة
- if (Str1 + Str2 == (CString) "11") TXT = "0";
- else if (Str1 + Str2 == (CString) "00") TXT = "1";
- else if (Str1 + Str2 == (CString) "10") TXT = "1";
- else if (Str1 + Str2 == (CString) "01") TXT = "1";
- } else { //operation ==> (-,+) Or (+,-) Or (+,+) //No sign bit Or sign bit = 0
- // في هذا الإحتمال إلسي تكون النتائج موجبة وذلك بسبب نتائج العملية و التي تعطي قيمة
- // موجبة للمتمم و أيضا الإحتمال الأخر و هوه إجراء العملية على عدين موجبين
- if (Str1 + Str2 == (CString) "11") TXT = "1";
- else if (Str1 + Str2 == (CString) "00") TXT = "0";
- else if (Str1 + Str2 == (CString) "10") TXT = "0";
- else if (Str1 + Str2 == (CString) "01") TXT = "0";
- }
- ALLTXT = TXT + ALLTXT;
- }
- if ((value1 < 0) && (value2 < 0)) // ; sign bit bitwise And (signbit ,signbit) / (1 And 1) = 1
- {
- // في هذا الإحتمال الوحيد بهذه العملية يكون الناتج سالبا و بما أن المتمم يكون في الخانة الأولى
- // اليمنى في نظام العدد اثنائي و لا يمكن إلا أن يكون مساويا للواحدفبذالك يمكننا أظافته لنظام العد
- // العشري من بعد تحويل الثنائي للعشري
- return (- (Tens(ALLTXT) + 1)); //; convert From Twos To Tens And Add 1 For sign bit
- } else {
- return Tens(ALLTXT); //; convert From Twos To Tens //No sign bit Or sign bit = 0
- }
- }
- int Bit_OR(int value1, int value2)
- {
- CString TXT , ALLTXT;
- CString A = Twos(value1); //; convert Form Tens To Twos
- CString B = Twos(value2); //; convert Form Tens To Twos
- int Slen1 = strlen(A) - strlen(B);
- int Slen2 = strlen(B) - strlen(A);
- if (strlen(A) > strlen(B)) ;
- {
- for (int I = 1; I <= (Slen1); I++)
- {
- if (value2 >= 0) // + value2 Or value2 = 0
- {
- B = "0" + B;
- } else { //; - value2
- B = "1" + B;
- }}
- }
- if (strlen(B) > strlen(A))
- {
- for (int I = 1; I <= (Slen2); I++)
- {
- if (value1 >= 0) // + value1 Or value1 = 0
- {
- A = "0" + A;
- } else { // ; - value2
- A = "1" + A;
- }}
- }
- for (int M=A.GetLength();M>=1;M--)
- {
- CString Str1 = A.Left(M).Right(1);
- CString Str2 = B.Left(M).Right(1);
- if ((value1 < 0 && value2 >= 0) || (value2 < 0 && value1 >= 0) || (value1 < 0 && value2 < 0))
- {
- // operation ==> (-,+) Or (+,-) Or (-,-)
- // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- // Look Func Twos
- if (Str1 + Str2 == (CString) "11") TXT = "0";
- else if (Str1 + Str2 == (CString) "00") TXT = "1";
- else if (Str1 + Str2 == (CString) "10") TXT = "0";
- else if (Str1 + Str2 == (CString) "01") TXT = "0";
- } else { //operation ==> (+,+) //No sign bit
- if (Str1 + Str2 == (CString) "11") TXT = "1";
- else if (Str1 + Str2 == (CString) "00") TXT = "0";
- else if (Str1 + Str2 == (CString) "10") TXT = "1";
- else if (Str1 + Str2 == (CString) "01") TXT = "1";
- }
- ALLTXT = TXT + ALLTXT;
- }
- if ((value1 < 0 && value2 >= 0) || (value2 < 0 && value1 >= 0) || (value1 < 0 && value2 < 0))
- {
- // 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
- // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- // Look Func Twos
- return (- (Tens(ALLTXT) + 1)); //; convert From Twos To Tens And Add 1 For sign bit
- } else {
- return Tens(ALLTXT); //; convert From Twos To Tens //No sign bit
- }
- }
- int Bit_XOR(int value1, int value2)
- {
- CString TXT , ALLTXT;
- CString A = Twos(value1); //; convert Form Tens To Twos
- CString B = Twos(value2); //; convert Form Tens To Twos
- int Slen1 = strlen(A) - strlen(B);
- int Slen2 = strlen(B) - strlen(A);
- if (strlen(A) > strlen(B)) ;
- {
- for (int I = 1; I <= (Slen1); I++)
- {
- if (value2 >= 0) // + value2 Or value2 = 0
- {
- B = "0" + B;
- } else { //; - value2
- B = "1" + B;
- }}
- }
- if (strlen(B) > strlen(A))
- {
- for (int I = 1; I <= (Slen2); I++)
- {
- if (value1 >= 0) // + value1 Or value1 = 0
- {
- A = "0" + A;
- } else { // ; - value2
- A = "1" + A;
- }}
- }
- for (int M=A.GetLength();M>=1;M--)
- {
- CString Str1 = A.Left(M).Right(1);
- CString Str2 = B.Left(M).Right(1);
- if ((value1 < 0 && value2 > 0) || (value2 < 0 && value1 > 0))
- {
- // operation ==> (-,+) Or (+,-)
- // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- // Look Func Twos
- if (Str1 + Str2 == (CString) "11") TXT = "1";
- else if (Str1 + Str2 == (CString) "00") TXT = "1";
- else if (Str1 + Str2 == (CString) "10") TXT = "0";
- else if (Str1 + Str2 == (CString) "01") TXT = "0";
- } else { //operation ==> (+,+) (-,-) // No sign bit Or sign bit = 0
- if (Str1 + Str2 == (CString) "11") TXT = "0";
- else if (Str1 + Str2 == (CString) "00") TXT = "0";
- else if (Str1 + Str2 == (CString) "10") TXT = "1";
- else if (Str1 + Str2 == (CString) "01") TXT = "1";
- }
- ALLTXT = TXT + ALLTXT;
- }
- if ((value1 < 0 && value2 > 0) || (value2 < 0 && value1 > 0))
- {
- //; sign bit bitwise exclusive OR (signbit XOR Number) (Number XOR signbit) (1 XOR 0) = 1 (0 XOR 1) = 1
- // TXT = StrIsInt(C) + TXT convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- // Look Func Twos
- return (- (Tens(ALLTXT) + 1)); //; convert From Twos To Tens And Add 1 For sign bit
- } else {
- return Tens(ALLTXT); //; convert From Twos To Tens //No sign bit Or sign bit = 0
- }
- }
- CString Twos(int A) //; convert Form Tens To Twos
- {
- float C = A;
- CString TXT = "";
- if(A < 0) C = (abs(A) - 1); //; -A = (+A - 1) Look bitwise NOT // bitwise NOT أنظر
- // في حالة كان الرقم سالب نحوله لرقم موجب ثم نطرح منه واحد لأن ناتج الطرح بنفس قيمة الرقم سالبا
- do
- {
- C = (C / 2); // ; / int($C) // نقوم بالقسمة لتحويل لنظام العد الثنائي
- if(A < 0) // ; if -A
- {
- TXT = StrIsInt(C) + TXT; //; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- // نحول ناتج عملية الطرح عكسيا ليصبح عددا موجبا لندخله في العمليات على أساس أنه موجب
- } else { // ; Else + A Or 0
- TXT = StrIsFloat(C) + TXT; //; convert Form +A To Twos +A
- // في حالة كان الرقم موجبا نحوله مباشرة لنظام العد الثائي ليدخل في العمليات و هووه موجب
- }
- C = int(C);
- } while (C >= 1);
- return TXT;
- }
- int Tens(CString B) // convert From Twos To Tens
- {
- int D =0;
- int C =0;
- for (int M=B.GetLength();M>=1;M--)
- {
- D += ( _ttoi(B.Left(M).Right(1)) * _POW(2 , C) ); //; convert From Twos To Tens
- C +=1;
- }
- return D;
- }
- CString StrIsInt(float C)
- {
- CString iResult = "";
- iResult.Format(_T("%g"), C);
- if (iResult.Find(".",1) == -1)
- return "1";
- else
- return "0";
- }
- CString StrIsFloat(float C)
- {
- CString iResult = "";
- iResult.Format(_T("%g"), C);
- if (iResult.Find(".",1) == -1)
- return "0";
- else
- return "1";
- }
- int _POW(int X , int Y)
- {
- int Z = 1;
- for (int M = 1; M <= Y; M++)
- {
- Z *= X;
- }
- return Z;
- }
وهذا على لغة
Autoit
PHP كود المصدر
- $file = FileOpen("operation.txt", 1)
- for $i = 1 To 100 Step 1
- $Line1 = "Autoit BitAND ==> " & BitAND($i , $i + 5) & " FuncBit_AND ==> " & Bit_AND($i, $i + 5) & _
- " NO ==> ( " & $i & " , " & $i + 5 & " )"
- $Line2 = "Autoit BitAND ==> " & BitAND(- $i , - ($i + 5)) & " FuncBit_AND ==> " & Bit_AND(- $i, - ($i + 5)) & _
- " NO ==> ( " & - $i & " , " & - ($i + 5) & " )"
- $Line3 = "Autoit BitAND ==> " & BitAND($i , - ($i + 5)) & " FuncBit_AND ==> " & Bit_AND($i, - ($i + 5)) & _
- " NO ==> ( " & $i & " , " & - ($i + 5) & " )"
- $Line4 = "Autoit BitAND ==> " & BitAND(- $i , ($i + 5)) & " FuncBit_AND ==> " & Bit_AND(- $i, ($i + 5)) & _
- " NO ==> ( " & - $i & " , " & ($i + 5) & " )"
- FileWriteLine($file,$Line1)
- FileWriteLine($file,$Line2)
- FileWriteLine($file,$Line3)
- FileWriteLine($file,$Line4)
- $Line1 = "Autoit BitOR ==> " & BitOR($i , $i + 5) & " FuncBit_OR ==> " & Bit_OR($i, $i + 5) & _
- " NO ==> ( " & $i & " , " & $i + 5 & " )"
- $Line2 = "Autoit BitOR ==> " & BitOR(- $i , - ($i + 5)) & " FuncBit_OR ==> " & Bit_OR(- $i, - ($i + 5)) & _
- " NO ==> ( " & - $i & " , " & - ($i + 5) & " )"
- $Line3 = "Autoit BitOR ==> " & BitOR($i , - ($i + 5)) & " FuncBit_OR ==> " & Bit_OR($i, - ($i + 5)) & _
- " NO ==> ( " & $i & " , " & - ($i + 5) & " )"
- $Line4 = "Autoit BitOR ==> " & BitOR(- $i , ($i + 5)) & " FuncBit_OR ==> " & Bit_OR(- $i, ($i + 5)) & _
- " NO ==> ( " & - $i & " , " & ($i + 5) & " )"
- FileWriteLine($file,$Line1)
- FileWriteLine($file,$Line2)
- FileWriteLine($file,$Line3)
- FileWriteLine($file,$Line4)
- $Line1 = "Autoit BitXOR ==> " & BitXOR($i , $i + 5) & " FuncBit_XOR ==> " & Bit_XOR($i, $i + 5) & _
- " NO ==> ( " & $i & " , " & $i + 5 & " )"
- $Line2 = "Autoit BitXOR ==> " & BitXOR(- $i , - ($i + 5)) & " FuncBit_XOR ==> " & Bit_XOR(- $i, - ($i + 5)) & _
- " NO ==> ( " & - $i & " , " & - ($i + 5) & " )"
- $Line3 = "Autoit BitXOR ==> " & BitXOR($i , - ($i + 5)) & " FuncBit_XOR ==> " & Bit_XOR($i, - ($i + 5)) & _
- " NO ==> ( " & $i & " , " & - ($i + 5) & " )"
- $Line4 = "Autoit BitXOR ==> " & BitXOR(- $i , ($i + 5)) & " FuncBit_XOR ==> " & Bit_XOR(- $i, ($i + 5)) & _
- " NO ==> ( " & - $i & " , " & ($i + 5) & " )"
- FileWriteLine($file,$Line1)
- FileWriteLine($file,$Line2)
- FileWriteLine($file,$Line3)
- FileWriteLine($file,$Line4)
- Next
- Func Bit_AND($value1, $value2 , $value = '')
- $BOOL = IsNumber($value) Or StringStripWS($value, 8) = ''
- if IsNumber($value1) And IsNumber($value2) And ($BOOL) Then
- Dim $TXT = "" ,$TXT2 = ""
- $A = Twos($value1) ; convert Form Tens To Twos
- $B = Twos($value2) ; convert Form Tens To Twos
- If StringLen($A) > StringLen($B) Then
- For $I = 1 To StringLen($A) - StringLen($B) Step 1
- Select
- Case $value2 >= 0 ; + value2 Or value2 = 0
- $B = "0" & $B
- Case $value2 < 0 ; - value2
- $B = "1" & $B
- EndSelect
- Next
- ElseIf StringLen($B) > StringLen($A) Then
- For $I = 1 To StringLen($B) - StringLen($A) Step 1
- Select
- Case $value1 >= 0 ; + value1 Or value1 = 0
- $A = "0" & $A
- Case $value1 < 0 ; - value2
- $A = "1" & $A
- EndSelect
- Next
- EndIf
- $A = StringSplit($A,"")
- $B = StringSplit($B,"")
- for $I = $A[0] To 1 Step -1
- Select
- Case $value1 < 0 And $value2 < 0
- ;Case operation ==> (-,-)
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- Select
- Case $A[$i] & $B[$i] = '11'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '00'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '10'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '01'
- $TXT = '1'
- EndSelect
- Case Else
- ;Case operation ==> (-,+) Or (+,-) Or (+,+) No sign bit Or sign bit = 0
- Select
- Case $A[$i] & $B[$i] = '11'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '00'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '10'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '01'
- $TXT = '0'
- EndSelect
- EndSelect
- $TXT2 = $TXT & $TXT2
- Next
- $E = StringSplit($TXT2,"")
- Select
- Case StringStripWS($value, 8) = ''
- If ($value1 < 0 And $value2 < 0) Then ; sign bit bitwise And (signbit ,signbit) / (1 And 1) = 1
- Return (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
- Else
- Return Tens($E) ; convert From Twos To Tens
- EndIf
- Case StringStripWS($value, 8) <> ''
- If ($value1 < 0 And $value2 < 0) Then ; sign bit bitwise And (signbit ,signbit) / (1 And 1) = 1
- $A = (- (Tens($E) + 1)) ;; convert From Twos To Tens And Add 1 For sign bit
- Else
- $A = (Tens($E)) ; convert From Twos To Tens // No sign bit Or sign bit = 0
- EndIf
- Bit_AND($A, $value,"")
- EndSelect
- Else
- Return ""
- EndIf
- EndFunc
- Func Bit_OR($value1, $value2 , $value = '')
- $BOOL = IsNumber($value) Or StringStripWS($value, 8) = ''
- if IsNumber($value1) And IsNumber($value2) And ($BOOL) Then
- Dim $TXT = "" ,$TXT2 = ""
- $A = Twos($value1) ; convert Form Tens To Twos
- $B = Twos($value2) ; convert Form Tens To Twos
- If StringLen($A) > StringLen($B) Then
- For $I = 1 To StringLen($A) - StringLen($B) Step 1
- Select
- Case $value2 >= 0 ; + value2 Or value2 = 0
- $B = "0" & $B
- Case $value2 < 0 ; - value2
- $B = "1" & $B
- EndSelect
- Next
- ElseIf StringLen($B) > StringLen($A) Then
- For $I = 1 To StringLen($B) - StringLen($A) Step 1
- Select
- Case $value1 >= 0 ; + value1 Or value1 = 0
- $A = "0" & $A
- Case $value1 < 0 ; - value2
- $A = "1" & $A
- EndSelect
- Next
- EndIf
- $A = StringSplit($A,"")
- $B = StringSplit($B,"")
- for $I = $A[0] To 1 Step -1
- Select
- Case ($value1 < 0 And $value2 >= 0) Or ($value2 < 0 And $value1 >= 0) Or ($value1 < 0 And $value2 < 0)
- ;Case operation ==> (-,+) Or (+,-) Or (-,-)
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- Select
- Case $A[$i] & $B[$i] = '11'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '00'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '10'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '01'
- $TXT = '0'
- EndSelect
- Case Else ;operation ==> (+,+) No sign bit
- Select
- Case $A[$i] & $B[$i] = '11'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '00'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '10'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '01'
- $TXT = '1'
- EndSelect
- EndSelect
- $TXT2 = $TXT & $TXT2
- Next
- $E = StringSplit($TXT2,"")
- Select
- Case StringStripWS($value, 8) = ''
- If ($value1 < 0 And $value2 >= 0) Or ($value2 < 0 And $value1 >= 0) Or ($value1 < 0 And $value2 < 0) Then
- ; 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
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- Return (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
- Else
- Return Tens($E) ; convert From Twos To Tens // No sign bit Or sign bit = 0
- EndIf
- Case StringStripWS($value, 8) <> ''
- if ($value1 < 0 And $value2 >= 0) Or ($value2 < 0 And $value1 >= 0) Or ($value1 < 0 And $value2 < 0) Then
- ; 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
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- $A = (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
- Else
- $A = (Tens($E)) ; convert From Twos To Tens //No sign bit
- EndIf
- Bit_OR($A, $value,"")
- EndSelect
- Else
- Return ""
- EndIf
- EndFunc
- Func Bit_XOR($value1, $value2 , $value = '')
- $BOOL = IsNumber($value) Or StringStripWS($value, 8) = ''
- if IsNumber($value1) And IsNumber($value2) And ($BOOL) Then
- Dim $TXT = "" ,$TXT2 = ""
- $A = Twos($value1) ; convert Form Tens To Twos
- $B = Twos($value2) ; convert Form Tens To Twos
- If StringLen($A) > StringLen($B) Then
- For $I = 1 To StringLen($A) - StringLen($B) Step 1
- Select
- Case $value2 >= 0 ; + value2 Or value2 = 0
- $B = "0" & $B
- Case $value2 < 0 ; - value2
- $B = "1" & $B
- EndSelect
- Next
- ElseIf StringLen($B) > StringLen($A) Then
- For $I = 1 To StringLen($B) - StringLen($A) Step 1
- Select
- Case $value1 >= 0 ; + value1 Or value1 = 0
- $A = "0" & $A
- Case $value1 < 0 ; - value2
- $A = "1" & $A
- EndSelect
- Next
- EndIf
- $A = StringSplit($A,"")
- $B = StringSplit($B,"")
- for $I = $A[0] To 1 Step -1
- Select
- Case ($value1 < 0 And $value2 > 0) Or ($value2 < 0 And $value1 > 0)
- ;Case operation ==> (-,+) Or (+,-)
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- Select
- Case $A[$i] & $B[$i] = '11'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '00'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '10'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '01'
- $TXT = '0'
- EndSelect
- Case Else ;operation ==> (+,+) (-,-) // No sign bit Or sign bit = 0
- Select
- Case $A[$i] & $B[$i] = '11'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '00'
- $TXT = '0'
- Case $A[$i] & $B[$i] = '10'
- $TXT = '1'
- Case $A[$i] & $B[$i] = '01'
- $TXT = '1'
- EndSelect
- EndSelect
- $TXT2 = $TXT & $TXT2
- Next
- $E = StringSplit($TXT2,"")
- Select
- Case StringStripWS($value, 8) = ''
- If ($value1 < 0 And $value2 > 0) Or ($value2 < 0 And $value1 > 0) Then
- ; sign bit bitwise exclusive OR (signbit XOR Number) (Number XOR signbit) (1 XOR 0) = 1 (0 XOR 1) = 1
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- Return (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
- Else
- Return Tens($E)
- EndIf
- Case StringStripWS($value, 8) <> ''
- If ($value1 < 0 And $value2 > 0) Or ($value2 < 0 And $value1 > 0) Then
- ; sign bit bitwise exclusive OR (signbit XOR Number) (Number XOR signbit) (1 XOR 0) = 1 (0 XOR 1) = 1
- ; $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit Look Func Twos
- $A = (- (Tens($E) + 1)) ; convert From Twos To Tens And Add 1 For sign bit
- Else
- $A = (Tens($E)) ; convert From Twos To Tens //No sign bit Or sign bit = 0
- EndIf
- Bit_XOR($A, $value,"")
- EndSelect
- Else
- Return ""
- EndIf
- EndFunc
- Func Twos($A) ; convert Form Tens To Twos
- $C = $A
- if($A < 0) Then $C = (abs($A) - 1) ; -A = (+A - 1) Look bitwise NOT
- $TXT = ""
- Do
- $C = (int($C) / 2) ; / int($C)
- if($A < 0) Then ; if -A
- $TXT = IsInt($C) & $TXT ; convert Form Tens (+A - 1) = -A To Twos + A with Out sign bit
- ElseIf ($A >= 0) Then ; ElseIf + A Or 0
- $TXT = IsFloat($C) & $TXT ; convert Form +A To Twos +A
- EndIf
- Until(Int($C) < 1)
- Return $TXT
- EndFunc
- Func Tens($B) ; convert From Twos To Tens
- $D =0
- $C =0
- for $I = $B[0] To 1 Step -1
- $D += ($B[$I] * POW(2 , $C)) ; convert From Twos To Tens
- $C +=1
- Next
- Return $D
- EndFunc
- Func POW($X , $Y)
- $Z = 1
- For $I = 1 To $Y Step 1
- $Z *= $X
- Next
- Return $Z
- EndFunc