C语言unsigned int相关代码出现format string警告如何解决
问题修复方案
1 编译警告修复
该编译警告是scanf的格式占位符书写错误导致的:
- C语言中
unsigned int类型对应的输入格式符是%u,你误写为了&u,编译器无法识别到有效占位符,因此认为你传入的第二个参数没有被格式字符串用到,触发该警告。
直接修改main函数里的scanf调用行即可:
// 修复前 scanf("&u",&n); // 修复后 scanf("%u", &n);
修改后该警告就会消失。
2 比特位反转函数逻辑修复
你当前的reverse_bits函数存在两处逻辑问题,运行后不会得到正确的反转结果:
- 循环内没有对
n做右移操作,会进入无限死循环 - 仅处理到
n的最高有效位为止,没有覆盖unsigned int的全部比特位(通常是32位),高位的0不会参与反转
修复后的函数实现如下:
unsigned int reverse_bits(unsigned int n) { unsigned int reverse = 0; // 按unsigned int的比特位长度循环,确保所有位都参与反转 for (int i = 0; i < sizeof(n) * 8; i++) { reverse <<= 1; // 取n的最低位放到reverse的最低位 reverse |= n & 1; // n右移1位,处理下一位 n >>= 1; } return reverse; }
内容的提问来源于stack exchange,提问作者Chris Evans
相关产品推荐
相关产品推荐

