PDA

View Full Version : سوال: دست کاری بیت های یک عدد



Arcsinos
چهارشنبه 31 شهریور 1389, 09:50 صبح
سلام دوستان توی ++C تابعی وجود داره که مثلا تعداد صفر ها یا تعداد یک های موجود در مقدار باینری یک عدد رو به ما بده یا مثلا تابعی وجود داره که یه عدد رو بگیره و بهش بگیم برو و بیت پنجم رو اگه یک بود صفر اگه صفر بود یکش کن ؟

سوال اصلی این شکلیه که البته گفته از تابع استفاده نشه .


Write a “CntBits” function that counts the number of one bits in a 16-bit integer value. Do not use any built-in functions in your language’s library to count these bits for you

PC2st
چهارشنبه 31 شهریور 1389, 10:43 صبح
از عملگرهای بیتی استفاده کنید، بطور مثال برای بررسی صفر یا یک بودن بیت چهارم (از راست):

x & (1 << (4-1))

tdkhakpur
چهارشنبه 31 شهریور 1389, 10:43 صبح
void SetBit(void *Ptr, int bitNo, bool Value)
{
char *tmpPtr=(char *) Ptr;
BYTE bSet=1, bClr=0xff;
bSet <<= bitNo%8;
bClr ^= bSet;
if( Value )
tmpPtr[bitNo/8] |= bSet;
else
tmpPtr[bitNo/8] &= bClr;
}

شماره بیتها از 0 ایندکس شده.


مثال بیت شماره 0 رو ست میکنه
char ch=1;
SetBit(&ch, 0, true);
یا بیت شماره 7 را پاک میکنه
char ch=1;
SetBit(&ch, 7, false);

Salar Ashgi
چهارشنبه 31 شهریور 1389, 14:49 عصر
البته میتونید اعداد دودویی را بصورت رشته ای فرض کرده و عملیات مورد نظر را براحتی روی رشته اعمال کنید ./