x = 33078
x << 16
# => 2167799808
在C代码是
int x = 33078;
x << 16
# => -2127167488
我知道这与溢出有关,但是如何让C得到与Ruby相同的结果呢?
解决方法:
33078<< 16不适合整数,这就是为什么在C中它溢出并变为负值.同时在ruby中,类型会自动转换为足以存储此计算结果的大小. 如果您希望能够在C中计算此值,请使用具有更高最大值的类型.在这种情况下,unsigned int就足够了,但是如果你想计算更大的值,你可能需要long long甚至unsigned long long.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。