首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么F#按位运算符垫有1的符号类型?

问为什么F#按位运算符垫有1的符号类型?
EN

Stack Overflow用户
提问于 2010-09-29 21:44:25
回答 1查看 1K关注 0票数 3

我正在查看按位操作的F#文档:

按位右移运算符.结果是第一个操作数与第二个操作数右移。从最不重要位置移动的位不被旋转到最重要位置。对于无符号类型,最重要的位填充了零。对于有符号类型,最重要的位是填充的。第二个参数的类型是int32。

与C++语言(可能也是C语言)相比,这种设计选择背后的动机是什么?例如:

代码语言:javascript
复制
int mask = -2147483648 >> 1; // C++ code

其中-2147483648 =

代码语言:javascript
复制
10000000 00000000 00000000 00000000

面具等于1073741824

其中1073741824 =

代码语言:javascript
复制
01000000 00000000 00000000 00000000

现在,如果您用F# (或C#)编写相同的代码,这确实会让MSB使用它们,您将得到-1073741824。

其中-1073741824 =

代码语言:javascript
复制
11000000 00000000 00000000 00000000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-29 22:02:52

回答改革后的问题(在评论中):

C和C++标准没有定义右移负值的结果(它不是实现定义的,也不是未定义的,我不记得是哪个)。

这是因为定义该标准是为了反映底层指令集的最低公分母。例如,如果指令集不包含asr原语,则执行真正的算术移位需要几个指令。由于标准规定了一人或两人的补语表示,这一情况进一步复杂化。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3826090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档