我尝试了其他各种值,但仍然没有错误.
int main() { unsigned int mem = 0x89678456543454345934; cout << mem; return 0; }
解决方法
编辑
赋值的右侧是integer literal.为了表示它,编译器使用整数文字可以适合的第一种类型(按其大小排序).如果没有这种类型,那么程序就是格式错误.常量的十进制值是:
648873758694578209446196L
在我的机器上,对于clang和g std :: numeric_limits< unsigned long long> :: max()是18446744073709551615,它小于你的常量.看起来你的程序是不正确的,除非编译器使用超过64位代表无符号长long,我对此非常怀疑.正如@juanchopanza所说,clang拒绝编译代码,但错误
error: integer constant is larger than the largest unsigned integer type
然而,g继续前进并编译它,只发出一个警告
warning: large integer implicitly truncated to unsigned type
警告很混乱,因为它指的是右侧,而不是进一步转换为unsigned int,因为它得到了
warning: large integer implicitly truncated to unsigned type [-Woverflow]
在我的机器上,std :: numeric_limits< unsigned int> :: max()是4294967295,因此648873758694578209446196L%4294967295是3633002191L.但是,当我运行你的程序时,我得到1412716852.这是因为程序格式错误,不幸的是编译器没有发出错误(它不是标准规定的),而只是一个警告.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。