خريطة بت في c++ - هل ستقوم int غير الموقعة بهذه المهمة؟
-
12-11-2019 - |
سؤال
أخشى أن أعترف بأنني لم أستخدم C++ منذ فترة ولكن أخشى أنني مضطر إلى ذلك الآن، وأنا صدئ بعض الشيء.
أحتاج إلى صورة نقطية، وأنا أهتم بالأداء، ولن يعد حجم الصورة النقطية الخاص بي 25 بت.
كنت أفكر في استخدام int غير الموقع، ولكن أخشى أنني لا أتذكر كيفية تنفيذه في c/c++
هل يتم تطبيق unsigned int كرقم ثنائي عادي؟
أنا أيضًا منفتح على أي اقتراحات أخرى للصورة النقطية.
شكرا مقدما للمساعدة!
المحلول
استخدم std::bitset<25>
من الرأس <bitset>
. bitset
يمكن فهرستها مع []
وهو قالب، لذلك من المحتمل أن يتوسع إلى مجرد unsigned int
(أو ما يعادله) مع جميع العمليات المضمنة.
نصائح أخرى
هل فكرت الأمراض المنقولة جنسيا::bitset من <bitset>
الملف الاساسي؟
مثال:
#include <iostream>
#include <bitset>
int main() {
std::bitset<25> bits(146);
std::cout << bits << std::endl;
//using operator[] to access individual bit manually!
for(size_t i = 0 ; i < bits.size() ; ++i)
std::cout << bits[i] << " ";
return 0;
}
انتاج:
0000000000000000010010010
0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ملحوظة: bits[0]
هو الجزء الأقل أهمية، بينما bits[bits.size()-1]
هو الشيء الأكثر أهمية!
العرض التوضيحي عبر الإنترنت: http://ideone.com/3sSF0
النظر في bitset بدلا من ذلك.
يجب أن تكون قادرا على استخدام نوع عدد صحيح لخريطة قليلا، على افتراض أنه يحتوي على أجزاء كافية لك.
ومع ذلك، هناك <bitset>
في المكتبة القياسية.