بت عكسي


مستوى الصعوبة سهل
كثيرا ما يطلب في أجهزة آبل جوجل سامسونج
قطعة معالجة البت بت

بتات عكسية لعدد صحيح بدون إشارة يبلغ 32 بت.

مثال

إدخال

43261596،00000010100101000001111010011100 (XNUMX)

الناتج

964176192 (00111001011110000010100101000000)

يشير العدد الصحيح بدون إشارة 32 بت إلى رقم غير سالب يمكن تمثيله بسلسلة من 32 حرفًا حيث يمكن أن يكون كل حرف إما "0" أو "1".

خوارزمية

  1. لأني في النطاق من 0 إلى 15
    • إذا لم تكن بتة i من البداية ومن النهاية هي نفسها ، اقلبها.
  2. اطبع الرقم بالثنائي.

تفسير

  1. نحن نتبادل البتات فقط عندما تكون مختلفة لأن تبديل البتات عندما تكون متماثلة لا يغير إجابتنا النهائية.
  2. لتبديل بتين مختلفين ، نقلب بتات الفرد باستخدام XOR عامل.

بت عكسي

تطبيق

برنامج C ++ للبتات العكسية

#include <bits/stdc++.h>
using namespace std;
void Reverse(uint32_t n)
{
    for (int i = 0; i < 16; i++)
    {
        bool temp = (n & (1 << i));
        bool temp1 = (n & (1 << (31 - i)));
        if (temp1 != temp)
        {
            n ^= (1 << i);
            n ^= (1 << (31 - i));
        }
    }
    for (int i = 31; i >= 0; i--)
    {
        bool temp = (n & (1 << i));
        cout << temp;
    }
    cout << endl;
}
int main()
{
    uint32_t n;
    cin >> n;
    Reverse(n);
    return 0;
}
43261596
00111001011110000010100101000000

برنامج JAVA للبتات العكسية

import java.util.*;

public class Main
{
    public static void Reverse(int n)
    {
        for (int i = 0; i < 16; i++)
        {
            int temp = (n & (1 << i));
            temp = temp==0? 0: 1;
            int temp1 = (n & (1 << (31 - i)));
            temp1 = temp1==0? 0: 1;
            if (temp1 != temp)
            {
                n ^= (1 << i);
                n ^= (1 << (31 - i));
            }
        }
        for (int i = 31; i >= 0; i--)
        {
            int temp = (n & (1 << i));
            temp = temp==0? 0: 1;
            System.out.print(temp);
        }
    }
  public static void main(String[] args) {
    Scanner sc = new Scanner( System.in ) ;
    int n=sc.nextInt();
    Reverse(n);
  }
}


3456785
10001000111111010010110000000000

تحليل التعقيد للبتات العكسية

تعقيد الوقت

نحن نتخطى فقط 16 بتة تعقيد الوقت هي O (16) والتي هي أساسًا O (1).

تعقيد الفضاء

إنه أيضًا O (1) حيث أخذنا متغيرين إضافيين من النوع المنطقي.

تباين البتات العكسية

  • في هذا السؤال ، طُلب منا عكس البتات من العدد الصحيح غير الموضح ، ولكن يمكن تعديل نفس السؤال لإيجاد تكملة العدد الصحيح غير المحدد.

الآن ، ما هو تكملة رقم معين؟

A number obtained by toggling the state of each binary character in the given binary representation of integer is known as the complement of that number.

ومن ثم للقيام بذلك ، يمكننا ببساطة تغيير كل الأرقام من 0 إلى 1 وكل الأرقام من 1 إلى 0 في السلسلة الثنائية المحددة.

مثال

إذا كان الرقم المحدد هو 20 ، فسيكون التمثيل الثنائي هو 10100

ومن ثم سيكون المكمل 01011.

تطبيق

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n = 20;
    string ans;
    while(n){
        if(n%2==0){
            ans = '1'+ans;
        }
        else{
            ans = '0'+ans;
        }
        n/=2;
    }
    cout<<"Complement of the given number is: "<<ans;
}
Complement of the given number is: 01011
  • يمكن تأطير العديد من الأسئلة على التمثيل الثنائي للأعداد الصحيحة مثل إضافة سلسلتين ثنائيتين. لحل مثل هذا النوع من الأسئلة ، يجب على المرء أن يعرف قواعد الجمع الثنائي.

قواعد الإضافة:

يُعرف هذا الجدول بجدول الحقيقة. يتم استخدامه للعثور على ناتج عمليات ثنائية الأحجام مثل الجمع والطرح وما إلى ذلك.

  • تخضع المشكلات الأكثر تعقيدًا المتعلقة بعمليات البت والتمثيلات الثنائية لمعالجة البتات وهو أمر شائع في البرمجة التنافسية.

لكن أساسيات معالجة البتات هي كيفية تمثيل هياكل البيانات المختلفة في شكل ثنائي.

المراجع