C语言 二进制左右移运算小程序

#include  ////调用itoa();
#include 



 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<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倍. 并没有变成负数

你可能感兴趣的:(c语言学习)