عملگر های بیتی c++ چی هستن ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۹۹ نفر آنلاین
۱۱۳ عضو و ۱۸۶ مهمان در سایت حاضرند

عملگر های بیتی c++ چی هستن ؟

+4 امتیاز

سلام کسی می تونه درباره نحوه استفاده از عملگر های بیتی و کاربردشون توضیح بده ؟

سوال شده آذر 1, 1392  بوسیله ی 13mody (امتیاز 256)   8 36 54

http://en.wikipedia.org/wiki/Bitwise_operations_in_C

http://en.wikipedia.org/wiki/Bitwise_operation

1 پاسخ

+5 امتیاز
 
بهترین پاسخ

& : عملگر and

اگر ۲ بیت هر ۲ یک باشند جواب هم ۱ میشه در غیر این صورت ۰

15&7

1 1 1 1 // 15
0 1 1 1 // 7
------------
0 1 1 1 // 7

| : عمگر or

اگر هر کدوم از بیت ها ۱ باشن جواب  هم ۱ میشه  در غیر این صورت ۰

4|3

0 1 0  0 // 4
0 0 1  1 // 3
----------
0 1 1 1 // 7

~ : عملگر not

بیت ۱ به ۰ تبدیل میشه و ۰ به ۱

~‍‍8

1 0 0 0  // 8
--------------- 
0 1 1 1  // 7

 

^ : عملگر xor

اگر ۲ بیت مثل هم باشن جواب ۰ میشه در غیر این صورت ۱

14^9

1 1 1 0  // 14
1 0 0 1   //  9
-----------
0 1 1 1  //  7

>>: عملگر  left shift

تمام بیت ها رو به چپ شیفیت می کنه مثلا 

3<<2

0 0 1 1  //  3
---------
1 1 0 0  // 12

<< : علگر right shift

برعکس >> همه بیت ها رو به راست شیفت می کنه :

10>>2

1 0  1 0  // 10
----------
0  0  1 0 //  2

 

دقت داشته باشین که << , >> که در cin , cout استفاده میشن کاملا با این عملگر ها فرق دارن اون عملگر ها اصطلاحا overload شدن و معنی جدیدی پیدا کردن .

و این که عملگر های زیر هم با هم معادل هستن :

a &=3   va    a = a&3
a |=3   va    a = a|3
a <<=3   va    a = a<<3
va..........

کاربرد ها :

مصرف بهینه حافظه : توی برنامه نویسی بزرگترین مقدار حافظه ای که می تونین بهش دسترسی داشته از نوع بایت هست ولی با استفاده از این عملگر ها می تونین از هر ۸ بیت موجود در بایت استفاده کنین . مثلا می تونین ۸ تا متغیر از نوع bool رو داخل یک متغیر از نوع char ذخیره کنین .

مثال :

#include <iostream>
using namespace std;
class BoolContainer
{
public:
    BoolContainer ():
    var(0)
    {}

    bool operator [](int index)
    {
        if(index>7)
            throw "Wrong index";
       return var & (1<<index);//var & pow(2,index)
    }
    void setCondition(int index,bool condition)
    {
        if(index>7)
            throw "Wrong index";
        if(condition)
        {
            var |= 1<<index;
        }

        else
        {
            var &= !(1<<index);
        }
    }

private:
    unsigned char var;

};
int main()
{
    BoolContainer container;
    //test
    container.setCondition(0,true);
    cout<<container[0]<<endl;

    container.setCondition(1,true);
    cout<<container[1]<<endl;

    container.setCondition(1,false);
    cout<<container[1]<<endl;

    cout<<container[5]<<endl;

    container.setCondition(5,true);
    cout<<container[5];
    //
}

برای دیدن کاربرد های بیشتر می تونین به این لینک مراجعه کنین :

http://graphics.stanford.edu/~seander/bithacks.html

پاسخ داده شده اسفند 1, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد اسفند 1, 1392 بوسیله ی 13mody
کد رو میشه توضیح بدین
...