有符号整数的右移

  • 本文关键字:右移 整数 符号 c
  • 更新时间 :
  • 英文 :

#include<stdio.h>
int main()
{
  int num;
  printf("enter the numbern");
  scanf("%d",&num);
  int a,b;
  printf("enter the number of bits yiu want to shiftn");
  scanf("%d",&b);
  a=num>>b;
  printf("a is=%dn",a);
  return 0;
}

在这里,对于 num 的正值,我得到了预期的结果。但是对于 num 的负值,找不到答案来试运行我的程序。只是一个例子,考虑我给 num=-1因此,-1 将表示为 1111111111111111 将其右移 1 应该产生十进制形式的输出0111111111111111为 32767。但输出为 -1。

来自 C99 标准 N1256(强调我的(:

6.5.7 按位移位运算符

5 E1 >> E2 的结果是 E1 右移 E2 位位置。如果 E1 具有无符号类型,或者 E1 具有有符号类型和非负值,则结果的值是 E1 X 2E2 商的整数部分。如果 E1 具有有符号类型和负值,则结果值由实现定义

右移负值的行为是 C 中定义的实现。

对于gcc,从文档中,符号位被传播(强调我的(:

(

4.5 整数(对有符号整数(C90 6.3、C99 和 C11 6.5(进行一些按位运算的结果

按位运算符作用于值的表示形式,包括符号位和值位,其中符号位被视为紧靠最高值值位的上方。有符号的">>"通过符号扩展作用于负数

在其他实现中,一些小型嵌入式平台不会传播符号位,但大多数实现会传播它。

最新更新