您的位置:首页 > 编程语言 > C语言/C++

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

2017-11-28 14:40 162 查看
#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倍. 并没有变成负数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言