PDA

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



jik
28-10-2012, 10:17
من میخوام 8 بیت موجود در یک بایت رو برعکس توی یه بایت دیگه بزارم باید چی کار کنم

مثل این
10110011
11001101


یا این

11110000
00001111



ممنون میشم کمک کنید

agape
28-10-2012, 11:59
به این عملیات میگن نات کردن یا برعکس کردن که فکر می کنم تو مثال اول جواب رو اشتباه نوشتید

مثل این
10110011
11001101البته ذکر نکردید چه زبانی مد نظرتون هست من به زبان سی میگم


a= ~b;
OR
a=0xFF-b;

Shapour_Ardebil
28-10-2012, 19:33
به این عملیات میگن نات کردن یا برعکس کردن که فکر می کنم تو مثال اول جواب رو اشتباه نوشتید
البته ذکر نکردید چه زبانی مد نظرتون هست من به زبان سی میگم


a= ~b;
OR
a=0xFF-b;


با سلام
ضمن عذرخواهی :hi: از برادر گرامیمان جناب آقای مزارعی فکر میکنم منظور ایشان یک چیز دیگر بود مثلا کد باینری 10000000 معادل 128 به باینری 00000001 معادل 1 شود یعنی حروف سمت راست به ترتیب از سمت چپ نوشته شود ویا برعکس , بنا بر فرمایش شما زبان برنامه نویس را بنویسید خیلی ساده است تا توسط اینجانب ویا اساتید گرامی راهنمایی شود

Aghaeifar
28-10-2012, 21:11
دو تا مسئله است! شما یا دنبال بهینه ترین حالت ممکنی یا نه اصلا چه روشی هست! احتمالا دومی منظورته
هیچ کاری نداری! در یه حلقه for میشه راحت گذاشت که هر بار به اندازه مقدار متغیر حلقه بیاد عدد 1 رو شیفت بده راست و & بکنه و مجدد شیفت بده به سمت چپ و نتیجه رو در یک متغیر دیگه بذاره.

agape
28-10-2012, 23:35
اوکی - منظور رو اشتباهی متوجه شده بودم
خوب برای کار راه های زیادی من چند نمونه رو مینویسم
اول

public static byte ReverseByteBits(byte value) { byte ret = 0; for (int i = 0; i < 8; i++) if ((value & (byte)(1 << i)) != 0) ret += (byte)(1 << (7 - i)); return ret; }
روش کندی هست به مراتب از حلقه استفاده شده

روش دوم

BYTE ReverseBits(BYTE b) { BYTE c; c = ((b >> 1) & 0x55) | ((b << 1) & 0xaa); c |= ((b >> 2) & 0x33) | ((b << 2) & 0xcc); c |= ((b >> 4) & 0x0f) | ((b << 4) & 0xf0); return(c); }

روش هوشنندانه ای است و سرعت خوبی هم داره


reverse(uint8_t in)
{
uint8_t out;
out = 0;
if (in & 0x01) out |= 0x80;
if (in & 0x02) out |= 0x40;
if (in & 0x04) out |= 0x20;
if (in & 0x08) out |= 0x10;
if (in & 0x10) out |= 0x08;
if (in & 0x20) out |= 0x04;
if (in & 0x40) out |= 0x02;
if (in & 0x80) out |= 0x01;

return(out);
}

بعدی

#define REVERSEBITS(b) (BitReverseTable[b])
static BYTE BitReverseTable[256] = { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff };

و..........

Shapour_Ardebil
29-10-2012, 14:36
من هم در همیشه از روش زیر استفاده میکنم



//Reverse String
private string rev(string s)
{
char[] c = s.ToCharArray();
string ts = "";
for (int i = s.Length - 1; i >= 0; i--)
{
ts += c[i].ToString();
}

return (ts);
}