【发布时间】:2015-04-21 22:28:50
【问题描述】:
我正在尝试将 unsigned long long 转换为 unsigned long。以下是正确的方法吗?
unsigned long removeExtraBits2(unsigned long long c) {
return (unsigned long) ((c << 32) >> 32);
}
如果没有,你能提供一个可行的例子吗?
我的假设是当左移然后右移时,最左边的 32 位设置为 0。
谢谢!
编辑:转换的目的是去除多余的位,“高于”第 32 位,有效地将最右边的 32 位保留为无符号长整数。
【问题讨论】:
-
static_cast<unsigned long>(c);不够好?你为什么要写一个函数? -
你从哪里得到“32”?如果
unsigned long有 64 位呢?还是49?还是 111? -
因为它似乎不起作用。我有
unsigned long long c = 39134856588429;在执行unsigned long converted = (unsigned long) c;时,我得到 3409554573,这显然是不正确的 -
哎呀,你是对的。现在这很尴尬......编码太多,甚至无法正确思考