PDA

View Full Version : معکوس کردن یک بایت



danial82
شنبه 08 آبان 1389, 16:33 عصر
من یک بایت دارم که مقدار 5 رو درون قرار دادم که به باینری میشه 00000101
حالا میخوام اونو معکوس کنم که میشه 160 یا 10100000

کسی تابعی در این مورد داره؟

mehdi.mousavi
شنبه 08 آبان 1389, 17:19 عصر
من یک بایت دارم که مقدار 5 رو درون قرار دادم که به باینری میشه 00000101
حالا میخوام اونو معکوس کنم که میشه 160 یا 10100000
کسی تابعی در این مورد داره؟

سلام.
برای اینکار روشهای زیادی وجود داره. یکی از هوشمندانه ترین این روشها، روشی هستش که آقای Rich Schroeppel (http://en.wikipedia.org/wiki/Richard_Schroeppel) (ریاضیدان) در سال 1972 ارائه کرد:

public byte ReverseBytes(byte value)
{
return (byte)((value * 0x0202020202UL & 0x010884422010UL) % 1023);
}


شما می تونید با 6 روش مختلف انجام اینکار در این آدرس (http://graphics.stanford.edu/%7Eseander/bithacks.html#BitReverseObvious) آشنا بشید. (دقت کنید که کدها به C نوشته شده اند، اما کد فوق رو شما می تونید در C#‎ استفاده کنید).
البته همونطور که گفتم، به N روش دیگه نیز میتونید اینکارو انجام بدید، اما بهترین روشها در همون آدرس فوق ذکر شده اند.

موفق باشید.

codelover
شنبه 08 آبان 1389, 17:28 عصر
سلام

سوالتون خیلی برام جالب بود بخاطر همین هم نشستم تا ببینم میتونم حلش کنم یا نه بعد هم این کد رو نوشتم که درست کار میکنه:لبخند:
قبول دارم که واقعا گیج کننده هست:گیج:


static void Main(string[] args)
{

byte input=byte.Parse(Console.ReadLine());
byte result = 0;

for (int i = 7; i >= 0; i--) {
if (input % 2 != 0) result += byte.Parse((Math.Pow(2, i).ToString()));
input >>= 1;
}
Console.WriteLine(result.ToString());

Console.ReadKey();
}

Salar Ashgi
شنبه 08 آبان 1389, 23:50 عصر
البته به شکل رشته وار هم میتونید باهاش برخورد کرده و معکوس رشته ، معادل دسیمال اون و ... پیدا کنید .

موفق باشید ./

tooraj_azizi_1035
یک شنبه 09 آبان 1389, 09:56 صبح
سلام،

For i=1 to 4
if bit[i]<>bit[9-i] then
begin
bit[i]=not(bit[i]);
bit[9-i]=not(bit[9-i]);
end;
9 معادل تعداد بیتها+1 است.


:خجالت:.Ideas are everything, Microsoft Corporation