C語言 二進位制左右移運算小程式
阿新 • • 發佈:2019-01-23
#include <stdlib.h> ////呼叫itoa();
#include <stdio.h>
int convert1(int , int );
int convert2(int , int );
int main()
{
int i;
int z;
int m;
int x;
char L;
char R;
char s[128];
printf("請輸入需操作的十進位制\n");
scanf("%d",&i);
printf("請輸入需要移動的位數\n" );
scanf("%d", &m);
getchar();
while(i != 0)
{
printf("請選擇左移(輸入L)或右移(輸入R)\n");
switch(getchar())
{
case 'L':
z = convert1( i, m);
itoa(z, s, 2);
printf("該數左移後為二進位制是: [%s]\n",s);
break;
case 'R':
x = convert2(i, m);
itoa(x, s, 2 );
printf("該數右移後為二進位制是: [%s]\n",s);
break;
default:
printf("unvalid command");
break;
}
printf("請繼續輸入:\n");
printf("請輸入需操作的十進位制\n");
scanf("%d",&i);
printf("請輸入需要移動的位數\n");
scanf("%d", &m);
getchar();
}
}
int convert1(int a, int n)
{
return( a<<n);
}
int convert2(int a, int n)
{
return( a>>n);
}
/* 列印結果
請輸入需操作的十進位制
40
請輸入需要移動的位數
3
請選擇左移(輸入L)或右移(輸入R)
L
該數左移後為二進位制是: [101000000]
請繼續輸入:
請輸入需操作的十進位制
40
請輸入需要移動的位數
1
請選擇左移(輸入L)或右移(輸入R)
R
該數右移後為二進位制是: [10100]
請繼續輸入:
請輸入需操作的十進位制
*/
總結(來自網路):
計算機的算術左移和邏輯左移相同,這個是正確的.
只有算術右移和邏輯右移是不同.
算術左移好像會把負的數變成正的,這句話不正確
如果把0000 1000左移四位,那最高位是不是變成1了,不就變成負的了?
這句話說對也對,說不對也沒錯 對的情況下是,如果計算機的字長剛好是8位的話,那麼0000 1000 左移4位後 就變成了1000 0000 就變成了負數 錯的情況下是,如果計算機的字長超過8位,那麼0000 1000 左移4位後, 變成了0000 1000 0000 ,數值增大了16倍. 並沒有變成負數