如果我在C/C++中编写以下代码:
using namespace std::chrono;
auto time = high_resolution_clock::now();
unsigned long long foo = time.time_since_epoch().count();
unsigned bar = foo;
Run Code Online (Sandbox Code Playgroud)
在转换为unsigned int时会丢弃哪些foo?有什么方法可以强制只保留最低有效位吗?
或者,是否有一种简单的方法将foo散列为unsigned int大小?(这是首选,但我在初始化列表中执行所有这些操作.)
编辑:刚刚意识到保留最低有效位仍然可以允许循环.我猜哈希是我当时的目标.
第二次编辑:为了澄清我在评论中回复的内容,我在循环中播种std :: default_random_engine,并且不希望溢出导致种子值重复.我正在寻找一种简单的方法来将unsigned long long哈希到unsigned int.
小智 6
在C和C++中使用无符号整数类型的算术通过模块化约简处理超出范围的值; 例如,如果unsigned int是32位类型,则当分配超出范围的值时,它将模值减小2^32并存储最小的非负代表.
特别是,当从较大的无符号整数类型分配时,这正是标准所要求的.
另请注意,标准并不保证大小unsigned int- 如果您需要,例如,一个绝对正好是32位宽的类型,请使用uint32_t.
| 归档时间: |
|
| 查看次数: |
1424 次 |
| 最近记录: |