您的位置:首页 > 编程语言 > C语言/C++

【C语言】统计一个数中1的个数(移位操作符)

2017-04-11 00:03 267 查看

移位操作符介绍:

== 移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。==

位移位运算符分为【>>】 右移和【<<】 左移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。

移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。 如果是左移,则规定补入的数全部是0; 如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)

左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变

示例:统计一个数中1的个数

#include<stdio.h>

unsigned int value, val;

int count_one_bits(unsigned value)
{
int ones;   //用于统计有几个1

for( ones = 0; value != 0; value = value >> 1 )
/*
**  右移直到这个数变成0就可以退出循环
**  >>是右移动,无符号数右移左边补0
*/
if( value % 2 != 0 )
ones = ones + 1;

return ones;
}

void main()
{
printf( "请输入一个数:" );
scanf( "%d", &val );
printf("该数中有%d个1",count_one_bits(val));
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息