View Full Version : سوال در مورد شیفت به چپ و راست
lexical_error
سه شنبه 28 مرداد 1393, 13:46 عصر
سلام دوستان
معمولا از این عبارات برای دستکاری بیت ها استفاده میکنند
bits |= (1 << 6)
bits &=~(1 << 6)
حالا سوال من اینه مگر مقدار شیف به چپ 1 برابر با مقدار زیر نمیشود؟!
1 << 6 = 01000000
اما تو یه رفرنس خوندم نوشته اینطور میشه
1 << 6 = 00100000
ممکنه بگید کدوم درسته؟
ممنون
masoud.8086
سه شنبه 28 مرداد 1393, 17:46 عصر
[QUOTE=lexical_error;2084970]سلام دوستان
معمولا از این عبارات برای دستکاری بیت ها استفاده میکنند
bits |= (1 << 6)
bits &=~(1 << 6)
حالا سوال من اینه مگر مقدار شیف به چپ 1 برابر با مقدار زیر نمیشود؟!
1 << 6 = 01000000
اما تو یه رفرنس خوندم نوشته اینطور میشه
1 << 6 = 00100000
سلام
کلاچند نوع شیفت داریم که ما در اسمبلی از شیفت بیتی استفاده میکنیم
مثالی که شما این جا اوردی اشتباهه شیفت به چپ یعنی اینکه یه بیت از سمت راست وارد کنی و یه بیت از سمت چپ خارج
مثلا
00000001 >>>این عدد در مبنای 10 برابر 1 هست حالا اگر ی شیفت به چپ بدیم مقدار برابر زیر میشود
00000010 >>> که این عدد برابر با 2 در مبنای 10 هست حالا اگر ی بیت دیگه شیقت بدیم مقدار تبدیل میشه به
00000100 >>>که این عدد برابر 4 در مبنای 10 هست.
00001000 >>> که این عدد برابر 8 در مبنای 10 هست.
خوب اگر دقت کنی میبینی هر بار که عددو ی بار شیفت به چپ میدیم یعنی از سمت راست ی بیت وارد و از سمت چپ ی بیت خارج میکنیم عدد داره 2 برابر میشه. یعنی بار اول که عدد یک بود ی شیفت به چپ دادیم شد 2 و بعدبا ی شیفت دیگه شد 4 و با ی شیفت دیگه شد 8.
----------------------------------------------------------------------------------------------------
حالا شیفت به راست عکس همین عمل یعنی ی بیت از سمت چپ وارد میشه و ی بیت از سمت راست خارج مثلا
00100100 >>>این مقدار برابر 34 دسیمال (مبنای 10) هست اگر ی بیت به راست شیفت بدیم مقدارش به مقدار زیر تغییر میکنه
00010010 >>>که این مقدار برابر 18 هست و اگر ی شیفت دیگه به راست بدیم مقدارش میشه
00001001 >>> که مقدار برابر 9 هست
نکته: اگر دقت کنی هر بار که شیفت به راست میدیم داره از مقدار اصلی کم میشه واضح بگم داره تقسیم به 2 میشه.فقط نکتش اینجاس الان مقدار 9 و عدد فرد و اگر دقت کنی بیت اخر برابر یک هست که اگر ی شیفت دیگه بدیم مقدارش میشه 00000100 >>>که میشه 4 .
موفق باشی.
lexical_error
سه شنبه 28 مرداد 1393, 18:03 عصر
ممنون دوست عزیز
ولی من سوالم چیز دیگه ای بود چون با این روشی که شما گفتی و روش خودم(که از چپ بیت خارج کنیم و از راست بیت صفر وارد کنیم برای شیفت به چپ) برای تمام مثالهایی که دیدم جواب میده اما برای 1 نه !
یعنی با توجه به دستورات کنترلی بالا جواب نمیده و بعد از n بار شیفت دادن 1 به چپ ، بیت 1 تو مکان n+1 بیت ظاهر میشه درصورتی که اینطور حاصل عبارات بالا درست در نمیاد !!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.