我有以下代码.
uint32_t reg_val = 0;
uint64_t val = 0;
reg_val = 0;
reg_val = ((val & 0xffffff000000) >> 24);
dev_write(rw,reg_val);
Run Code Online (Sandbox Code Playgroud)
编译器发出警告说
warning: integer constant is too large for "long" type
Run Code Online (Sandbox Code Playgroud)
我只将24位分配给reg_val,它被定义为大小为32位的无符号整数.
为什么编译器会生成此警告?
0xffffff000000对于32位长,常量太大,0x7fffffff在您的情况下范围.
把它写成0xFFFFFF000000ULL(unsigned long long)或通过写作避免问题
reg_val = (val >> 24) & 0xFFFFFF;
Run Code Online (Sandbox Code Playgroud)