ตัวดำเนินการ Bitwise ในการเขียนโปรแกรม C & C ++

เผยแพร่แล้ว: 2022-12-09

ใน RAM ข้อมูลจะถูกจัดเรียงเป็นลำดับของไบต์ ทุกไบต์มีแปดบิตต่อเนื่องกัน ตัวดำเนินการระดับบิต ของ C & C++ มีประโยชน์เมื่อคุณต้องการดำเนินการทางคณิตศาสตร์กับบิตของข้อมูล พวกมันค่อนข้างเร็วกว่าและบางครั้งก็ใช้เพื่อเพิ่มประสิทธิภาพของโปรแกรม พวกเขาทำงานบนอัลกอริทึม Bitwise ที่ดำเนินการในระดับบิตหรือจัดการบิตในรูปแบบต่างๆ

ประเภทของ Bitwise Operator ใน C & C++:

  1. ในระดับบิตและ
  2. ในระดับบิตหรือ
  3. บิตไม่
  4. Bitwise Exclusive-Or (XOR)
  5. ตัวดำเนินการกะซ้าย
  6. ตัวดำเนินการ Shift ขวา

มาดูรายละเอียดของแต่ละคนกัน:

สารบัญ

1. บิตและ:

ตัวดำเนินการระดับบิตและใน C หรือ C++ ใช้เครื่องหมายแอมเปอร์แซนด์ (&) ตัวเดียว ใช้ตัวเลขสองตัวเป็นตัวถูกดำเนินการและดำเนินการ AND กับบิตทั้งหมด ผลลัพธ์จะเป็น 1 ก็ต่อเมื่อบิตทั้งสองเป็น 1 หากบิตใดเป็น 0 ผลลัพธ์จะเป็น 0 โดยหลักแล้ว ตัวดำเนินการไบนารี ใน C & C++ จะใช้ตรรกะ AND ของบิตในทุกตำแหน่งของตัวเลขสองตัวที่กำหนดใน รูปแบบไบนารี

ตัวอย่าง:

สมมติว่าการแทนเลขฐานสองของตัวเลขสองตัว a & b คือ:

ก = 01011000

ข = 10111001

ดังนั้น a & b = 00011000

ดังที่เห็นจากตัวอย่างข้างต้น ผลลัพธ์จะแสดง '1' เฉพาะในตำแหน่งที่ทั้งตัวเลข a และ b มี 1 สำหรับตำแหน่งอื่นทั้งหมด ผลลัพธ์จะแสดงเป็น '0'

2. บิตหรือ:

ใน C & C++ Bitwise OR ทำงานค่อนข้างคล้ายกับ bitwise AND ข้อแตกต่างเพียงอย่างเดียวคือในตัวดำเนินการระดับบิตหรือ OR เพื่อให้ตำแหน่งของบิตเป็น '1' ในผลลัพธ์ มีเพียงหนึ่งในสองบิตเท่านั้นที่ควรเป็น '1' ตัวดำเนินการนี้ใช้ตัวเลขสองตัวเป็นตัวถูกดำเนินการและดำเนินการ OR กับทุกๆ บิตของตัวเลขสองตัว

มันทำงานในลักษณะต่อไปนี้:

  • หากทั้งสองบิตเป็น '1' ผลลัพธ์คือ '1'
  • หากทั้งสองบิตเป็น '0' ผลลัพธ์คือ '0'
  • หากบิตใดเป็น '1' ผลลัพธ์คือ '1'

เป็นหนึ่งใน ตัวดำเนินการระดับบิตของ C++ ที่ง่ายและใช้บ่อยที่สุด สัญลักษณ์ของมันคือท่อ |. นอกจากนี้ ยังเหมือนกับตัวดำเนินการตรรกะบูลีน ||

ตัวอย่าง:

สมมติว่าการแทนเลขฐานสองของตัวเลขสองตัว a| ข คือ:

ก = 01101001

ข = 10111000

ดังนั้น ก| ข = 11111001

3. ไม่ระดับบิต:

หรือที่เรียกว่าตัวดำเนินการ Bitwise NOT ซึ่งจะพลิกทุกบิตในผลลัพธ์ สัญลักษณ์ของมันคือตัวหนอน (~) วิธีง่ายๆ ในการจดจำการทำงานของตัวดำเนินการนี้คือ ตัวหนอนบางครั้งเรียกว่า twiddle และส่วนเสริมระดับบิตจะ twiddle ทีละบิต หมายความว่าถ้าคุณมี 1 ผลลัพธ์จะเป็น 0 และในทางกลับกัน กล่าวอีกนัยหนึ่ง ตัวดำเนินการระดับบิตใน C & C++ จะใช้ตัวเลขหนึ่งตัวและสลับบิตทั้งหมด

เมื่อกำหนดค่าที่ใหญ่ที่สุดที่เป็นไปได้สำหรับหมายเลขที่ไม่ได้ลง นาม ค่านี้เป็นหนึ่งใน ตัวดำเนินการระดับบิต C++ ที่มีประโยชน์มากที่สุด

ตัวอย่าง:

int num ที่ไม่ได้ลงชื่อ = ~0;

ในที่นี้ 0 หมายถึง 0 ทั้งหมด: 00000000 ดังนั้น การใช้ตัวดำเนินการ Bitwise NOT จะให้ผลลัพธ์เป็น 1 วินาที: 11111111 เนื่องจาก num เป็น int ที่ไม่ได้ลงนาม คุณจึงไม่ต้องกังวลเกี่ยวกับบิตเครื่องหมายหรือสองส่วนเติมเต็ม 1s เป็นจำนวนที่มากที่สุดที่เป็นไปได้ในผลลัพธ์

ลักษณะสำคัญอย่างหนึ่งของตัวดำเนินการ Bitwise NOT คือ 2's Complement ส่วนเติมเต็มของ 2 เท่ากับส่วนเติมเต็มของจำนวนนั้นบวก 1

ตัวอย่าง:

ก = 00000000

ดังนั้น 2 ส่วนประกอบ = -(11111111+1) = -00000000 = -0(ทศนิยม)

หมายเหตุ: ส่วนเติมเต็มระดับบิตของจำนวน N ใดๆ เท่ากับ -(N+1)

เรียนรู้หลักสูตรการพัฒนาซอฟต์แวร์ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโทเพื่อติดตามความก้าวหน้าในอาชีพของคุณอย่างรวดเร็ว

4. Bitwise Exclusive-OR (XOR):

การดำเนินการ Exclusive-OR ยอมรับสองอินพุตและเอาต์พุต a 1 หากอินพุตตัวใดตัวหนึ่งหรือตัวอื่นเป็น 1 แต่ผลลัพธ์จะเป็น 0 หากทั้งคู่เป็น 1 หากอินพุตทั้งคู่เป็น 0 หรือทั้งคู่เป็น 1 ผลลัพธ์คือ 0 ผลลัพธ์ ของ XOR เป็น 1 ก็ต่อเมื่อทั้งสองบิตต่างกัน สัญลักษณ์ของ ตัวดำเนินการไบนารีในภาษา C & C++ คือเครื่องหมายคาเร็ต (^) นอกจากนี้ ตัวดำเนินการระดับบิตใน C & C++ นี้ มีชื่อย่อว่า XOR มันดำเนินการเอกสิทธิ์เฉพาะหรือกับทุกคู่ของบิต โปรดทราบว่าไม่มีตัวดำเนินการบูลีนที่เทียบได้กับตัวดำเนินการนี้

ตัวอย่าง:

สมมติว่าเรามีตัวเลขสองตัวเป็น

ก = 10101010

ข = 01110010

ตอนนี้ a^b = 10101010 ^ 01110010 = 11011000

คุณสามารถเข้าใจ XOR ด้วยวิธีต่อไปนี้ สมมติว่าคุณมีบิต 0 หรือ 1 ที่คุณเรียกว่า A ตอนนี้เมื่อคุณใช้ A XOR 0 คุณจะได้ A กลับมา ดังนั้น ถ้า A เป็น 1 คุณจะได้ 1 และในทางกลับกัน เมื่อคุณหา A XOR 1 หมายความว่าคุณพลิก A ดังนั้น ถ้า A เป็น 1 คุณจะได้ 0 และกลับกัน

หากคุณใช้การดำเนินการ XOR ระดับบิตสองครั้ง กล่าวคือ คุณมีสองบิต A และ B และคุณตั้งค่า C = A XOR B จากนั้นดำเนินการ C XOR B ในกรณีนั้น ผลลัพธ์ที่คุณได้รับคือ A XOR B XOR C มันพลิกแต่ละบิตของ A สองครั้งหรือไม่พลิกเลยสักนิด ดังนั้น คุณเพียงแค่ได้ A กลับมาเหมือนเดิม

คุณสามารถพิจารณาการดำเนินการ XOR แบบไบนารีเป็นประเภทของการบิดแบบเลือกได้ หากคุณใช้ XOR กับตัวเลขสองตัว ซึ่งหนึ่งในจำนวนนั้นเป็น 1 ทั้งหมด ผลลัพธ์ที่ได้จะเทียบเท่ากับ twiddle

5. ตัวดำเนินการกะซ้าย:

ตัวดำเนินการระดับบิตนี้เลื่อนบิตทั้งหมดไปทางซ้ายตามจำนวนบิตที่ระบุ ตำแหน่งบิตที่ตัวดำเนินการ shift ซ้ายว่างเปล่าจะถูกเติมด้วย 0 สัญลักษณ์ของมันคือ <<

ใน C หรือ C++ นั้นทำงานโดยใช้ตัวเลขสองตัว เลื่อนบิตของตัวถูกดำเนินการตัวแรกไปทางซ้าย และตัวถูกดำเนินการตัวที่สองระบุจำนวนตำแหน่งที่จะเลื่อนตัวเลข

ไวยากรณ์:

<<= 5

นี่คือตัวอย่างโปรแกรม C/C++ เพื่อใช้งานตัวดำเนินการกะซ้าย:

int หลัก ()

{

int = 5;

<<= 2;

นับ << “x : ” << x << endl;

}

เอาต์พุต: a = 20

หลักสูตรและบทความยอดนิยมเกี่ยวกับวิศวกรรมซอฟต์แวร์

โปรแกรมยอดนิยม
โปรแกรม Executive PG ในการพัฒนาซอฟต์แวร์ - IIIT B โปรแกรมใบรับรอง Blockchain - PURDUE โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ - PURDUE MSC ในวิทยาการคอมพิวเตอร์ - IIIT B
บทความยอดนิยมอื่น ๆ
เงินเดือนวิศวกรคลาวด์ในสหรัฐอเมริกา 2021-22 เงินเดือนสถาปนิกโซลูชัน AWS ในสหรัฐอเมริกา เงินเดือนนักพัฒนาแบ็กเอนด์ในสหรัฐอเมริกา เงินเดือนนักพัฒนาส่วนหน้าในสหรัฐอเมริกา
เงินเดือนนักพัฒนาเว็บในสหรัฐอเมริกา คำถามสัมภาษณ์ Scrum Master ในปี 2022 จะเริ่มอาชีพใน Cyber ​​​​Security ในปี 2565 ได้อย่างไร ตัวเลือกอาชีพในสหรัฐอเมริกาสำหรับนักศึกษาวิศวกรรม

6. ตัวดำเนินการกะขวา:

ตัวดำเนินการระดับบิตนี้เลื่อนบิตทั้งหมดไปทางขวาตามจำนวนบิตที่ระบุ สัญลักษณ์คือ >>. ใน C หรือ C++ โอเปอเรเตอร์นี้จะใช้ตัวเลขสองตัว เลื่อนบิตของตัวถูกดำเนินการตัวแรกไปทางขวา และตัวถูกดำเนินการที่สองระบุจำนวนการเลื่อนของตัวเลข

ไวยากรณ์:

ก >>= 5

ตัวอย่างโปรแกรม C/C++ เพื่อใช้งานตัวดำเนินการ shift ขวา:

int หลัก () {

int = 5;

ก >> = 2;

นับ << “x : ” << x << endl;

}

เอาต์พุต: a = 1

หลักสูตรและบทความยอดนิยมเกี่ยวกับวิศวกรรมซอฟต์แวร์

โปรแกรมยอดนิยม
โปรแกรม Executive PG ในการพัฒนาซอฟต์แวร์ - IIIT B โปรแกรมใบรับรอง Blockchain - PURDUE โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ - PURDUE MSC ในวิทยาการคอมพิวเตอร์ - IIIT B
บทความยอดนิยมอื่น ๆ
เงินเดือนวิศวกรคลาวด์ในสหรัฐอเมริกา 2021-22 เงินเดือนสถาปนิกโซลูชัน AWS ในสหรัฐอเมริกา เงินเดือนนักพัฒนาแบ็กเอนด์ในสหรัฐอเมริกา เงินเดือนนักพัฒนาส่วนหน้าในสหรัฐอเมริกา
เงินเดือนนักพัฒนาเว็บในสหรัฐอเมริกา คำถามสัมภาษณ์ Scrum Master ในปี 2022 จะเริ่มอาชีพใน Cyber ​​​​Security ในปี 2565 ได้อย่างไร ตัวเลือกอาชีพในสหรัฐอเมริกาสำหรับนักศึกษาวิศวกรรม

เมื่อใดที่คุณควรใช้ตัวดำเนินการระดับบิตใน C & C++

  • ประหยัดพื้นที่:

ตัวดำเนินการระดับบิตช่วยประหยัดพื้นที่ ปัญหาหนึ่งที่พบบ่อยเมื่อทำงานในแต่ละระดับบิตคือ ถ้าคุณต้องการพื้นที่เพิ่มหรือเพื่อประหยัดเวลา คุณอาจต้องออกแบบส่วนใหญ่ของโปรแกรมใหม่ แต่การใช้ตัวดำเนินการระดับบิตใน C & C++ สามารถกำจัดการพึ่งพาได้ ตัวอย่างเช่น คุณสามารถใช้ ~0 เพื่อรับจำนวนเต็มที่มากที่สุดเท่าที่จะเป็นไปได้ การเลื่อนบิตเพื่อคูณด้วยสองเป็นการดำเนินการทั่วไป ดังนั้นจึงไม่ส่งผลกระทบต่อความสามารถในการอ่าน ซึ่งแตกต่างจากการใช้ขั้นสูงของการจัดการบิตที่อาจส่งผลกระทบในบางกรณี

  • การเข้ารหัส:

หากคุณกำลังทำงานกับการเข้ารหัสบางประเภทหรือบนระบบที่ต้องการฟิลด์บิตเพื่อใช้ในการจัดเก็บแอตทริบิวต์บูลีน

ข้อเท็จจริงที่ไม่ซ้ำใครเกี่ยวกับตัวดำเนินการระดับบิต

  • OR ระดับบิตของตัวเลขสองตัวเป็นเพียงผลรวมของตัวเลขเหล่านั้นหากไม่มีการพกพาเข้ามาเกี่ยวข้อง มิฉะนั้นคุณเพียงแค่ต้องเพิ่มบิตและ AND ตัวอย่างเช่น สมมติว่า x = 5(101) และ y = 2(010) เนื่องจากไม่มีการพกพาเข้ามาเกี่ยวข้อง ผลรวมจึงเป็นเพียง x|y แต่ถ้าตอนนี้เราเปลี่ยน 'x' เป็น 6 (110) ผลรวมจะเปลี่ยนเป็น x|y + x&y เพราะตอนนี้มีการพกพาเข้ามาเกี่ยวข้อง
  • ตัวดำเนินการ XOR ระดับบิตมีค่ามากที่สุดจากมุมมองการสัมภาษณ์ทางเทคนิค ตัวอย่างของปัญหาในการสัมภาษณ์ที่เกี่ยวข้องกับสิ่งนี้จะกล่าวถึงที่นี่ “สำหรับชุดตัวเลขที่กำหนดซึ่งประกอบด้วยองค์ประกอบทั้งหมดที่เกิดขึ้นเป็นจำนวนคู่ยกเว้นจำนวนเดียว จงหาจำนวนที่เกิดขึ้นเป็นคี่” คุณต้องทำ XOR กับตัวเลขทั้งหมดเพื่อแก้ปัญหานี้
  • ห้ามใช้ตัวดำเนินการเลื่อนไปทางขวาและซ้ายสำหรับจำนวนลบ ตัวถูกดำเนินการตัวที่สอง ซึ่งกำหนดจำนวนกะ มีจำนวนลบ ซึ่งนำไปสู่ลักษณะการทำงานที่ไม่ได้กำหนดใน C & C++ ตัวอย่างเช่น ผลลัพธ์ของทั้ง 1 >>- 1 และ 1 << -1 จะไม่ถูกกำหนด
  • ลักษณะการทำงานจะไม่ถูกระบุหากการเลื่อนของตัวเลขเกินความจุของจำนวนเต็ม ตัวอย่างเช่น 1 << 65 จะไม่ระบุหากจำนวนเต็มถูกจัดเก็บในรูปแบบ 64 บิต
  • การดำเนินการกะจะไม่เกิดขึ้นหากตัวถูกดำเนินการที่สอง (ตัวกำหนดจำนวนกะ) เป็น 0

เริ่มต้นกับเส้นทางวิทยาการคอมพิวเตอร์ของคุณด้วย UpGrad:

หากคุณต้องการเรียนรู้รายละเอียดเกี่ยวกับการพัฒนาส่วนหน้า (JavaScript, HTML, CSS), แบ็กเอนด์ (NoSQL-MongoDB) และไมโครเซอร์วิส คุณสามารถเรียนหลักสูตรวิทยาศาสตรมหาบัณฑิตสาขาวิทยาการคอมพิวเตอร์ของ UpGrad ได้ จัดทำโดย IIIT Bangalore & LJMU Alumni Status หลักสูตรนี้ช่วยให้คุณมีอาชีพเป็นวิศวกรซอฟต์แวร์/นักพัฒนาฟูลสแตกกับยักษ์ใหญ่ด้านเทคโนโลยีทั่วโลก

หลักสูตรนี้ครอบคลุมการเข้าถึง Career Transition Bootcamp ฟรีสำหรับผู้เริ่มต้นและผู้ที่ไม่ใช้เทคโนโลยี คุณจะได้เรียนรู้ภาษาโปรแกรมและเครื่องมือมากกว่า 10 ภาษาในหลักสูตรนี้ เพื่อเตรียมคุณให้พร้อมที่จะรับบทบาทที่ซับซ้อนในอุตสาหกรรมนี้อย่างละเอียด

การใช้ตัวดำเนินการระดับบิตใน C ++ คืออะไร

ใน C++ ตัวดำเนินการระดับบิตจะดำเนินการกับข้อมูลจำนวนเต็มในระดับไบนารี พวกมันทำงานในรูปแบบบิตที่เกี่ยวข้องกับการจัดการแต่ละบิต ดังนั้น การดำเนินการในระดับบิตจึงเรียกอีกอย่างว่าการเขียนโปรแกรมระดับบิต ตัวดำเนินการระดับบิตใน C++ ส่วนใหญ่ใช้สำหรับการคำนวณที่รวดเร็ว เนื่องจากทำงานบนตัวเลขสองหลักเท่านั้น ได้แก่ 0 และ 1 ตัวดำเนินการเหล่านี้ยังสามารถทดสอบและเปลี่ยนบิตจริงได้

คุณสามารถใช้ตัวดำเนินการเลื่อนซ้ายและขวาร่วมกันในรหัสได้หรือไม่?

ได้ คุณสามารถรวมตัวดำเนินการเลื่อนซ้ายและขวาเข้าด้วยกันได้ และหลังจากนั้น คุณสามารถแยกข้อมูลจากนิพจน์จำนวนเต็มได้

ตัวดำเนินการเสริมพลิกลำดับรหัสทั้งหมดหรือไม่

ไม่มันไม่ มันพลิก 1s และ 0s ดังนั้น 1 ทั้งหมดกลายเป็น 0 และในทางกลับกัน

เหตุใดชื่ออื่นของตัวดำเนินการเสริม Bitwise จึงเป็นตัวดำเนินการเสริม

เหตุผลคือต้องใช้ตัวถูกดำเนินการหรือค่าเดียวเท่านั้น เป็นตัวดำเนินการเอกฐาน เมื่อคุณทำการเติมเต็มในบิตใด ๆ 0 ทั้งหมดจะกลายเป็น 1 และในทางกลับกัน ตัวอย่างเช่น หากคุณมีนิพจน์จำนวนเต็มที่มีค่า 1111 0000 หลังจากดำเนินการเสริมระดับบิต ค่าจะกลายเป็น 0000 1111