c - gcc 7.3 128 位无符号整数运算
问题描述
我对 128 位整数的使用感到困惑。请看测试代码:
uint128_t test_data = 0x00000000FFFFFFFF0101010101010101;
uint64_t test_data_h = test_data >> 64;
uint64_t test_data_l = test_data ;
printf("test_data 0x %016llx %016llx\n", test_data_h, test_data_l);
我希望test_data_h
是 0x00000000FFFFFFFF,但结果是:
test data 0x 0000000000000000 0101010101010101
为什么是这样?
解决方案
许多编译器不支持 128 位常量。
反而
// uint128_t test_data = 0x00000000FFFFFFFF0101010101010101;
uint128_t test_data = (((uint128_t) 0x00000000FFFFFFFF) << 64) | 0x0101010101010101;
提示:启用所有编译器警告。
推荐阅读
- powershell - 无法从任务计划程序访问 COM 接口
- performance - 处理大型 kotlin 文件时,Android Studio 性能下降
- java - 如何访问用户定义的树集中对象的子字段?
- python - 在python中组合具有相同列名的文本
- python - 如何防止在 jupyter notebook 中导入模块?
- html - 引导轮播仅适用于移动设备
- ios - SceneKit如何在不同高度的地形上移动角色
- typescript - 过滤和转换 rxjs BehaviorSubject
- typescript - 接口字段应该具有实现该接口的类的类型 - 打字稿
- spring - 如果 JSON 中的键与我的实体中的字段名称不同,我如何将 JSON 中返回的字段映射到我的实体