c – 存储负数

前端之家收集整理的这篇文章主要介绍了c – 存储负数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的代码
int main()
{
int  a = -1;
printf("%d",a>>1);
return 0;
}

为什么给出输出-1.

解决方法

位移仅在无符号类型上定义,对于被实现定义的签名类型.
这是一个有用的改进.

Strictly speaking,it is defined for
signed types whenever the value is
positive and the result does not
overflow,and right shift is
implementation-defined for negative
values. Left shift,on the other hand,
is undefined for negative values

┌───┬──────────────┬──────────────────────────────────┬────────────────────────┐
│   │ Unsigned     │ Signed,positive                 │ Signed,negative       │
├───┼──────────────┼──────────────────────────────────┼────────────────────────┤
│<< │ well-defined │ well-defined,except on overflow │ undefined behavIoUr    │
│>> │ well-defined │ well-defined                     │ implementation-defined │
└───┴──────────────┴──────────────────────────────────┴────────────────────────┘

猜你在找的C&C++相关文章