واضح آرشیو وب فارسی:سایت ریسک: rouhallah08-02-2007, 09:21 AMبنام خدا با سلام دوباره پس از مدتي كه از دستم راحت بودين( اونم بخاطر امتحانات ) اومدم تا با سوالاتم سرتونو درد بيارم اما اينبار سوالم در مورد بيتهاي رايانهاي هست. و اون اينكه در زبان سي آيا تابعي هست يا راهي هست كه بشود از ابتدا يا انتهاي يك فايل به تعداد مشخصي بيت مثلاً چهار بيت چهار بيت فايل رو جستجو يا اسكن نمود ميدونم يه اعمالي رو در اين زبان ميشه رو بيتها انجام داد و براي اين منظور هم عملگرهايي وجود داره اما اين كه آيا تابعي هم براي جستجوي بيت به بيت در اين زبان باشه رو نميدونم. لطفاً اگر راهي بلديد كمكم كنيد با تشكر از هم شما hamidreza_buddy08-02-2007, 09:22 PMتوی c واحد دسترسی به داده ها بایت هست و نمیشه یک فایل رو بیت به بیت خوند و اگه این کار نیازه باید اون رو بایت به بایت خوند و برای هر بایت همۀ بیت ها رو چک کرد. rouhallah09-02-2007, 02:43 PMتوی c واحد دسترسی به داده ها بایت هست و نمیشه یک فایل رو بیت به بیت خوند و اگه این کار نیازه باید اون رو بایت به بایت خوند و برای هر بایت همۀ بیت ها رو چک کرد. با سلام دوباره ببخشيد بذاريد من مشكلم رو بگم شايد راه حلي برايش داشته باشيد من ميخوام از ابتدا يا از انتهاي يك فايل (زياد فرق نميكنه) فايلي رو به صورت چهار بيت چهار بيت بخونم و براي هر آرايشي خاص از اين چهار بيت ها يك شرط تعيين كنم و اگر مثلاً فلان چهاربيت به عنوان مثال: 1001 خوانده شد يك عملي انجام شود كه چون اين چهار بيت ميباشد فكر نكنم بتوان با بررسي بايت به هدفم برسم اصلاً فرض كنيم من بيام و هشت بيت هشت بيت بخونم آيا در اين صورت مي توان آرايش هر بايت را تشخيص داد در ضمن اگر من فرض خود را عوض كنم باز هم به بيتهاي كمتر از هشت نياز دارم مثل 7 بيت 6 بيت تا 1 بيت پس اگر راهي به ذهنتان ميرسد كه بشود حتي يك بيت از يك بايت را نيز تشخيص داد كمكم كنيد متشكر م someone09-02-2007, 02:51 PMسلام. توضیحات دوست عزیزم "hamidreza_buddy" کاملا صحیح هست. شما برای اینکه بیت ها رو بتونید چک کنید میتونید از bits operator استفاده کنید. ( & یا >> یا.....) بطور صریح تابعی برای این کار وجود نداره ولی میشه به راحتی این کار رو انجام داد. کافی شما عدد یک ( 1 ) رو به اندازه ی index مورد نظرتون به سمت چپ شیفت بدید و حاصل رو با متغییر مورد نظرتون & کنید. مشخصه که اگه در index مورد نظر 1 باشه حاصل 1 و اگه 0 باشه حاصل 0 هست. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! نمونه که براتون میذارم برای چک کردن متغییر های int هست (که 32 بیتی هست.) !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگه مشکلی پیش اومد اطلاع بدید. rouhallah09-02-2007, 03:20 PMسلام. توضیحات دوست عزیزم "hamidreza_buddy" کاملا صحیح هست. شما برای اینکه بیت ها رو بتونید چک کنید میتونید از bits operator استفاده کنید. ( & یا >> یا.....) بطور صریح تابعی برای این کار وجود نداره ولی میشه به راحتی این کار رو انجام داد. کافی شما عدد یک ( 1 ) رو به اندازه ی index مورد نظرتون به سمت چپ شیفت بدید و حاصل رو با متغییر مورد نظرتون & کنید. مشخصه که اگه در index مورد نظر 1 باشه حاصل 1 و اگه 0 باشه حاصل 0 هست. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! نمونه که براتون میذارم برای چک کردن متغییر های int هست (که 32 بیتی هست.) !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگه مشکلی پیش اومد اطلاع بدید. با سلام به شما دوست عزيز جناب someone كه در رابطه با مشكلات من شما كمكهاي شاياني به من كرديد من اصلاً قصد ندارم خود را بيش از اون چيزي كه هستم نشون بدم اگه ميبينيد شايد سوالاتم شايد در حد يك مبتدي نباشه فقط و فقط به خاطر اينه كه من يكم منطق خوبي دارم و به مسائل رايانهاي نيز با همون منطقه كه فكر ميكنم كه نتيجش چنين سوالاتي هست كه ميبينيد پس خواهش ميكنم در جوابهايي كه به سوالاتم ميدهيد كمي سطح پايين تر صحبت كنيد مخصوصاً در مورد اصطلاحات برنامه نويسي من اگه تو جملاتتون بحث منطقي خاي از اصطلاحات پيچيده كه تا اكنون نشنيدم باشه ميتونم اون چيزي كه ميگوييد رو بفهمم حالا با اين توضيحاتي كه دادم چند تا سوال داشتم 1 منظور شما از جمله کافی شما عدد یک ( 1 ) رو به اندازه ی index مورد نظرتون به سمت چپ شیفت بدید و حاصل رو با متغییر مورد نظرتون & کنید. چيست ؟ آيا منظورتون اينه كه مثلاً من گفتم ميخواهم چهار بيت چهار بيت فايلي رو چك كنم اينه كه بايد عدد( 1 )را به اندازه چهار بيت به سمت چپ شيفت دهم؟ 2 و اونجايي كه گفتيد بايد حاصل رو با متغير مورد نظر خود & كنم چون من نمونه برنامهاي نديدم اگه توضيح بديد كدوم متغيري رو بايد تعيين كنم كه حاصل با اون متغير & بشه ممنون ميشوم؟ 3 و سوال آخرم اينه كه اين برنامتون در باره" چک کردن متغییر های int " دقيقاً چه كاري انجام ميده اگه به سوالاتم جواب بدهيد مخصوصاً اين آخري من رو هم كم كم وارد جمع شما برنامه نويسان حرفهاي ميكنيد و با اين كار من رو خيلي خوشحا ميكنيد مطمئن باشيد زحمت شما بي اثر نخواهد بود چون من تلاش خودم رو خواهم كرد و در پي تلاش حتماً پيروزي هست با تشكر والسلام someone09-02-2007, 03:47 PMسلام دوست عزیز. من کاری نکردم و خوشحال میشم اگه بتونم کمکی کرده باشم. فرض کنید که شما یک متغییر از نوع int دارید که 32 بیتی هست. اگه شما مقدار این متغییر رو برابر با 1 قرار بدید به این صورت در این 4 بایت قرار میگیره : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! یا مثلا عدد دو 2 : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حالا اگه شما عدد 1 رو مثلا 4 بار به سمت چپ شیفت بدید دارید : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! احتمالا با ضرب منطقی آشنا هستید (&) که به این صورت عمل میکنه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! خب حالا در نظر بگیرید که شما عددی دارید مثل 2 که به صورت بالا در حافظه ذخیره شده. برای اینکه بیت دوم رو چک کنید کافیه عدد 1 رو یکبار به سمت چپ شیفت بدید که میشه 00000010 (البته بایت اول) و با عدد 2 and کنید (& یا همون ضرب منطقی ) حاصل به این شکل در میآد : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! یعنی بیت دوم TRUE هست یا مقدارش برابر یک هست. به همین ترتیب اگه بخواید باقی بیت ها رو چک کنید کافی عدد 1 رو به اندازه مورد نظرتون شیفت بدید. (به سمت چپ ). مثلا برای چک کردن بیت اندیس 4 ام کافی هست عدد 1 رو 4 بار شیفت بدید و با عدد مورد نظرتون & کنید و حاصل این ضرب رو بررسی کنید. درضمن بیاد داشته باشید که شمارش از 0 شروع میشه. باز هم اگه مشکلی بود اطلاع بدید. rouhallah12-02-2007, 10:16 PMبا سلام راستي اين طور كه معلومه با اين توضيحات شما نميشه در يك عنصر آرايه يك بيت رو ذخيره نمود someone13-02-2007, 02:47 AMدوباره سلام. فرض میکنیم شما یک آرایه ی 2 تایی از اعداد داشته باشید. این به این معنی هست که شما دو متغییر 32 بیتی از int دارید. که مثلا بصورت زیر به اونها دسترسی دارید : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! خب مثل قبل ما به تک تک بیت های این دو عضو دسترسی داریم. برای اینکه بتونیم بیت ها رو دستکاری کنیم باز میتونیم از boolean operator استفاده کنیم. مثل And یا Or یا Xor ( & و | و ^ ). فرض کنیم عدد اول ما 1 باشه که به این صورت ذخیره شده : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! خب فرض کنید ما میخوایم بیت دوم رو یک کنیم. یکی از راهها اینه که این عدد رو با عدد 2 OR کنیم. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! نتیجه به این شکل میشه : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! که نتیجش میشه عدد 3. در نمونه ای که براتون گذاشتم به اول عدد 1 رو یک بار به سمت چپ شیفت دادم که نتیجش میشه عدد 2 و بعد با Int مورد نظرم Or کردم : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! باز اگه مشکلی بود اطلاع بدید. rouhallah13-02-2007, 01:26 PMبا سلام شايد من سوالم رو درست مطرح نكردم منظورم اين است كه اگه ما مثلاً يك كاراكتر داشته باشيم كه هشت بيت داشته باشد آيا ميتونيم اين هشت بيت رو تو يك آرايه يك بعدي قرار دهيم كه داراي 8 عنصر است. به صورتي كه در هر عنصر اين آرايه يك بيت از هر هشت بيت اون كاراكتر ذخيره بشه مثلاً كاراكتر A كه كد اسكي اون 65 ميباشد به صورت دودويي ميشود 00100001 اگه بخواهيم اين بيتهاي كاراكتر A را در آرايهاي ذخيره كنيم ميتونيم آرايهاي 8 عنصري تعريف كنيم كه هر كدام از اين بيتها تو يك عنصر اون آرايه قرار بگيره؟ اگه ميشه لطفاً راهنماييم كنيد. با تشكر prodo13-02-2007, 05:25 PMبا سلام شايد من سوالم رو درست مطرح نكردم منظورم اين است كه اگه ما مثلاً يك كاراكتر داشته باشيم كه هشت بيت داشته باشد آيا ميتونيم اين هشت بيت رو تو يك آرايه يك بعدي قرار دهيم كه داراي 8 عنصر است. به صورتي كه در هر عنصر اين آرايه يك بيت از هر هشت بيت اون كاراكتر ذخيره بشه مثلاً كاراكتر A كه كد اسكي اون 65 ميباشد به صورت دودويي ميشود 00100001 اگه بخواهيم اين بيتهاي كاراكتر A را در آرايهاي ذخيره كنيم ميتونيم آرايهاي 8 عنصري تعريف كنيم كه هر كدام از اين بيتها تو يك عنصر اون آرايه قرار بگيره؟ اگه ميشه لطفاً راهنماييم كنيد. با تشكر سلام دوست عزیز , اگر منظورت اینه که می خوای یک بایت رو در یک آرایه ذخیره کنی که هر عضو اون آرایه , یک متغیره باید همون طوری که somone گفت یه بایت یه بایت اطلاعاتتو بخونی و بیت هاشو در آری در غیر این صورت می تونی بایت خونده شده را عینا در یک متغیر ذخیره کنی و هر بیت رو که لازم داشتی با عملیات شیفت خارج کنی. البته اگر هم با اسمبلی کارکرده باشی می تونی یه برنامه بنویسی که بیت به بیت برات اطلاعات رو بگیره و بعد با یه برنامه c اونو لینک کنی. ضمنا اگه فضولی نیست. اگه داری روی یک برنامه دی اسمبل کار می کنی(احساس کردم شاید اینجوریه:cool: ) برای چک کردن دستورا می تونی از جدول استفاده کنی soheila_c++13-02-2007, 07:32 PM!!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! [این برنامه به این صورت کار میکند که در هر نوبت مقدار i طوری مشخص میشود که با هر مقایسه فقط یکی از بیت ها تنظیم میشود.چون در یک بایت . بیت با مرتبه بالاتر بیانگر مقدار128 است از این مقدار به عنوان نقطه شروع استفاده کردیم.در هر دور حلقه i نصف میشه.این کار باعث میشه تا بیت بعدی 1بشه و بقیه بیت ها 0بشن .به این صورت در هر دور حلقه یکی از بیت های ch تست میشن.اگر این بیت برابر1باشه مقایسه نتیجه ی درست بازمیگردونه و عدد 1 به خروجی فرستاده میشه.در غیر این صورت 0به خروجی فرستاده میشه......البته همینطور که someone گفتند بهتره از عملگر شیفت(در این برنامه شیفت به راست) استفاده بشه چون سرعت بیشتری نسبت به عمل ضرب و تقسیم داره.در واقع بهتره به جای i=i/2 بنویسیم i >>1 =i soheila_c++14-02-2007, 10:06 AM!!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این برنامه به این صورت کار میکند که در هر نوبت مقدار i طوری مشخص میشود که با هر مقایسه فقط یکی از بیت ها تنظیم میشود.چون در یک بایت . بیت با مرتبه بالاتر بیانگر مقدار128 است از این مقدار به عنوان نقطه شروع استفاده کردیم.در هر دور حلقه i نصف میشه.این کار باعث میشه تا بیت بعدی 1بشه و بقیه بیت ها 0بشن .به این صورت در هر دور حلقه یکی از بیت های ch تست میشن.اگر این بیت برابر1باشه مقایسه نتیجه ی درست بازمیگردونه و عدد 1 به خروجی فرستاده میشه.در غیر این صورت 0به خروجی فرستاده میشه......البته همینطور که someone گفتند بهتره از عملگر شیفت(در این برنامه شیفت به راست) استفاده بشه چون سرعت بیشتری نسبت به عمل ضرب و تقسیم داره.در واقع بهتره به جای i=i/2 بنویسیم i >>1 =i سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 560]