Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เพิ่มจำนวนสูงสุดโดยการจัดเรียงบิตใหม่ใน C++


คำชี้แจงปัญหา

กำหนดหมายเลขที่ไม่ได้ลงนาม ให้หาจำนวนสูงสุดที่จะเกิดขึ้นได้โดยใช้บิตของหมายเลขที่ไม่ได้ลงนามที่ให้ไว้

หากตัวเลขที่ป้อนคือ 8 การแทนค่าไบนารีของมันคือ−

<ก่อน>00000000000000000000000000001000

หากต้องการขยายให้ใหญ่สุด ให้ตั้งค่า MSB เป็น 1 จากนั้นตัวเลขจะกลายเป็น 2147483648 ซึ่งมีการแทนค่าไบนารีเป็น−

<ก่อน>10000000000000000000000000000000

อัลกอริทึม

<ก่อน>1. นับจำนวนชุดบิตในการแทนค่าไบนารีของจำนวนที่กำหนด 2 ค้นหาตัวเลขที่มีบิตเซ็ตที่มีนัยสำคัญน้อยที่สุด3 เลื่อนตัวเลขไปทางซ้าย (32 – n)

ตัวอย่าง

#include ใช้เนมสเปซ std; getMaxNumber ที่ไม่ได้ลงชื่อ (หมายเลขที่ไม่ได้ลงชื่อ) { int n =__builtin_popcount (num); ถ้า (n ==32) { ส่งคืน num; } ผลลัพธ์ที่ไม่ได้ลงนาม =(1 <