user1101
سه شنبه 11 اسفند 1388, 23:09 عصر
چرا وقتی بیت های یک عدد صحیح منفی به اندازه ی یک بیت به راست شیفت داده می شود، مقداری که از بیت ها توسط برنامه برگشت داده می شود، مثبت نمی شود؟!
مثلا مقدار عدد -5 را یک بیت به راست شیفت می دهم اما برنامه -3 را بر می گرداند
مگر یک بیت از سمت راست خارج و یک صفر از سمت چپ وارد نمی شود!؟ پس بیت علامت صفر میشود که نشان دهنده ی عدد مثبت است
void main()
{
int i;
int j;
int rshift, lshift;
while(1)//infinite loop
{
printf("\n\n\tEnter an integer for i: ");
scanf("%d", &i);
printf("\n\n\tEnter an integer for j: ");
scanf("%d", &j);
rshift = i >> j;
lshift = i << j;
printf("\n\n\trshift = %d, lshift = %d\n\n\tpress a key to continue...", rshift, lshift);
getch();
clrscr();
}
}
i یک عدد صحیح علامت دار هست که مقدارش در حافظه به اندازه ی j به راست و چپ شیفت داده می شه
مثلا مقدار عدد -5 را یک بیت به راست شیفت می دهم اما برنامه -3 را بر می گرداند
مگر یک بیت از سمت راست خارج و یک صفر از سمت چپ وارد نمی شود!؟ پس بیت علامت صفر میشود که نشان دهنده ی عدد مثبت است
void main()
{
int i;
int j;
int rshift, lshift;
while(1)//infinite loop
{
printf("\n\n\tEnter an integer for i: ");
scanf("%d", &i);
printf("\n\n\tEnter an integer for j: ");
scanf("%d", &j);
rshift = i >> j;
lshift = i << j;
printf("\n\n\trshift = %d, lshift = %d\n\n\tpress a key to continue...", rshift, lshift);
getch();
clrscr();
}
}
i یک عدد صحیح علامت دار هست که مقدارش در حافظه به اندازه ی j به راست و چپ شیفت داده می شه