今天遇到了一个问题,遇到一个32位的数据,写一个子函数来判断它的多少位是1.我的思路一开始是把这个数据变成一个32位容量的数组然后每个位去比较是不是1,如果是1,就用另一个变量加1.最后返回这个变量. 但是这样不对当而且也没有必要转成数组来做. int count_bit (unsigned int a) { ; while (a) { counts += a & 0x1u ; a >>= ; } return counts ; } 这个子函数,把想要判断的32位数据传入进来.然后先对
要求是不使用sizeof,一开始写了个看似可以,但是有问题的方法: long* a = NULL; ; int n = (char*)b - (char*)a; 这个方法等价于sizeof(long),但这其实有问题,在32位编译器上编译得到的代码在64位机器上得到的结果还是n=4,如果是64位编译器那么得到n=8. 上面的思路其实有问题,因为类型的大小依赖于编译器.从另外一个方面来想,指针的大小是机器决定的(有问题),所以如果能够使用sizeof的话,直接根据sizeof(int*)就可以判断