微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 │
└───┴──────────────┴──────────────────────────────────┴────────────────────────┘

原文地址:https://www.jb51.cc/c/111522.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐