使用移位运算的时候,没有把最终的值重新赋值到原变量,导致死循环
来源:互联网 发布:托福app软件推荐 编辑:程序博客网 时间:2024/04/28 10:57
如下代码所示,在使用移位运算的时候,粗心地忘记了赋值运算符。应使用 tmp >>= 1 而不是 tmp >> 1。否则的话tmp一直没有被更新,造成程序陷入到死循环中。
#include <stdio.h>#include <stdlib.h>#include <assert.h>int * newIntRaw(int n){ return (int *)malloc(sizeof(int) * n);}int count(int num){ int res = 0; unsigned int tmp = (unsigned int)num; while (tmp) { if (tmp & 0x1) res++; tmp = tmp >> 1; // 或者是 tmp >>= 1 而不是 tmp >> 1 } return res;}int * countBits(int num, int *returnSize) { int i; int *res = newIntRaw(num + 1); assert(num >= 0); *returnSize = num + 1; for (i = 0; i <= num; ++i) res[i] = count(i); return res;}void dispInt(int *arr, int n){ int i; for (i = 0; i < n; ++i) printf("%d ", arr[i]); putchar('\n');}int main(){ int num; int n; int *ret; scanf("%d", &num); ret = countBits(num, &n); dispInt(ret, n); return 0;}/*50 1 1 2 -1 2*/
阅读全文
0 0
- 使用移位运算的时候,没有把最终的值重新赋值到原变量,导致死循环
- GetLocalTime()导致的死循环
- 对fft循环移位的重新理解
- PHP在做二元赋值运算的时候, 返回值并不是左值,而是一个临时变量
- PHP在做二元赋值运算的时候, 返回值并不是左值,而是一个临时变量
- 091116(星期一)循环变量被溢出导致死循环的问题
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
- eclipse上一次没有正确关闭,导致启动的时候卡死异常解决办法解决办法
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
- shell中用$来引用变量的值,但对变量赋值的时候无需使用$符号
- 复制构造函数值传递导致的死循环
- Deiphi编译优化导致的死循环
- 1117 减法越界导致的死循环
- lazy value可以在需要的时候重新计算值,但不是重新赋值。
- 常量、变量、运算符、表达式和赋值语句的使用
- Redux(二: 中间件和异步操作)
- C++的类存储空间
- MySQL审计功能(插件)
- vue<组件篇>
- ConcurrentHashMap
- 使用移位运算的时候,没有把最终的值重新赋值到原变量,导致死循环
- IBC密码技术分析研究
- JAVA多线程和并发基础面试问答
- 从截屏调用功能看Android Binder的调用流程
- Android Studio 运行项目问题:
- 如何得到DHCP option 的 RFC文档
- 欢迎使用CSDN-markdown编辑器
- Android View事件分发机制 二(ViewGroup)
- 字符串转16进制和16进制转字符串