Sharif_
مدیر بازنشسته
والا کاربردش که زیاده ولی اگه بخوام کاربرد اصلیش رو بگم تو ادرس دهی کاربرد داره
چون یک عدد با عدد قبلی فقط تو یک بیت اختلاف دارن ادرس دهی راحتر و سریعتره
مشکل کد باینری عادی اینه که در حالت طبیعی خیلی بعیده که چند بیت همزمان تغییر کنن
اگه دقت کنی بعد عدد 011 عدد 100 هستش یعنی هر سه بیت همزمان تغییر کردن اما تو گری اعداد را طوری تو کنار هم میتونی قرار بدی که فقط در یک بیت متفاوت باشن مثل011 − 001 − 101 − 100
چون میگی به صورت باینری نباشه من هم الگوریتمشو میزارم هم برنامه BCD به گری رو به زبان c
الگوریتم
برای اطلاعات بیشتر میتونی به این سایت ها هم یه نگا بندازی
چون یک عدد با عدد قبلی فقط تو یک بیت اختلاف دارن ادرس دهی راحتر و سریعتره
مشکل کد باینری عادی اینه که در حالت طبیعی خیلی بعیده که چند بیت همزمان تغییر کنن
اگه دقت کنی بعد عدد 011 عدد 100 هستش یعنی هر سه بیت همزمان تغییر کردن اما تو گری اعداد را طوری تو کنار هم میتونی قرار بدی که فقط در یک بیت متفاوت باشن مثل011 − 001 − 101 − 100
چون میگی به صورت باینری نباشه من هم الگوریتمشو میزارم هم برنامه BCD به گری رو به زبان c
الگوریتم
کد:
[LEFT]Let G[n:0] be the input array of bits in Gray code
Let B[n:0] be the output array of bits in the usual binary representation
B[n] = G[n]
for i = n-۱ downto 0[/LEFT]
[LEFT]B[i] = B[i+۱] XOR G[i][/LEFT]
الگوریتم سریعتر تو C/java به این شکله
کد:
[LEFT]long inverseGray(long n) {
long ish, ans, idiv;
ish = 1;
ans = n;
while(true) {
idiv = ans >> ish;
ans ^= idiv;
if (idiv <= ۱ || ish == 32)
return ans;
ish <<= 1; // double number of shifts next time}
}[/LEFT]