c语言位运算_C语言面试每日一题:位运算符的运用(1)

8134956457bbb027f6d85f800cfb7484.gif

记录、总结C语言经典面试题,备忘

1. 题目

计算一个字节里有多少位被置1

2. 示例代码

/* 公众号:南风过境蜻蜓飞  */

#include "stdio.h"
#define BIT (0x1<<7)

int get_num(unsigned char );

int get_num(unsigned char x){
int i;
int count = 0;
unsigned char comp = BIT;

for(i = 0; i <sizeof(x) * 8; i++)
{
if((x & comp) != 0)
{
count++;
}
comp = comp >>1;
}
return count;
}

int main(void){
unsigned char a = 0;
int num = 0;

printf("请输入一个字节:");
scanf("%d",&a);
num = get_num(a);
printf("输入的一个字节里有%d位被置1\r\n",num);

return 0;
}

3. 代码分析、验证

题目主要考察位运算符的运用。解题方法:将一个字节里的8位分别判断是否被置为1

一个字节(byte)有8位,计算一个字节里有多少位被置1,首先在宏定义中将最高位置1,然后循环比较每个位是否被置成1,若是,则count++,循环结束返回返回count的值

测试:在VS Code 里编写以上代码,编译运行,输入值66(二进制:1000010),按照理论,代码运行结束后,返回的count值应该为2

测试如下,输入66,返回的count值为2,与理论值吻合

9f8e6d6442a03718cf5aa3d09a959ed6.png

4. 扩展

上面的代码我们是将宏定义最高位置1,然后循环比较每一位,对原代码做简单改动,将宏定义最低位置1,然后循环比较每一位,也可达到一样的效果,代码如下:

/* 公众号:南风过境蜻蜓飞  */

#include "stdio.h"
#define BIT (0x80>>7)

int get_num(unsigned char );

int get_num(unsigned char x){
int i;
int count = 0;
unsigned char comp = BIT;

for(i = 0; i <sizeof(x) * 8; i++)
{
if((x & comp) != 0)
{
count++;
}
comp = comp << 1;
}
return count;
}

int main(void){
unsigned char a = 0;
int num = 0;

printf("请输入一个字节:");
scanf("%d",&a);
num = get_num(a);
printf("输入的%d有%d位被置1\r\n", a, num);

return 0;
}

测试如下,输入66,返回的count值为2,与理论值吻合9f8e6d6442a03718cf5aa3d09a959ed6.png

f652ef32a12ddefa32fae59df3d04657.gif

内容来自《C和C++程序员面试秘笈》,笔者知识有限,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力

好文分享:

  • 物联网--MQTT协议(十)讲:构建PUBACK报文
  • 物联网基础:EC20 连接阿里云进行数据收发
  • 无限扩展定时器 MultiTimer 移植
103d2ab8bcf084c1196eaa3c0f8ff67c.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值