#include<stdio.h>
int main()
{
int num;
printf("enter the number\n");
scanf("%d",&num);
int a,b;
printf("enter the number of bits yiu want to shift\n");
scanf("%d",&b);
a=num>>b;
printf("a is=%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里对于num的正值,我得到预期的结果.但是使用num can的负值,t找到给出我的程序的干运行的答案.举个例子考虑我给num = -1所以-1将表示为1111111111111111并且右移1应该产生输出0111111111111111,即十进制形式的32767.但输出为-1.
R S*_*ahu 13
从C99标准N1256(强调我的):
6.5.7按位移位运算符
5 E1
>>E2的结果是E1右移E2位的位置.如果E1具有无符号类型或者E1具有有符号类型和非负值,则结果的值是E1 X 2 E2的商的整数部分.如果E1具有带符号类型和负值,则结果值是实现定义的.