C语言------操作符的巧妙使用

1.计算一个数字二进制补码里面1的个数

(1)方法一

根据这个10进制的整数,对这个数进行%10,/10不断地进行下去,

%10得到最后一位,/10得到舍去最后一位之后剩余的数;

同理得到:二进制就进行%2/2的操作,不断地进行下去,

%2==1就计数,否则就/2,知道结果是0就退出循环;

int countone(unsigned int m)
{int count = 0;while (m){if (m % 2 == 1){count++;}m = m / 2;}return count;
}
int main()
{int n = 0;scanf("%d", &n);int ret = countone(n);printf("%d\n", ret);return 0;
}

这个里面传参类型设置成unsigned int是因为-1这个特例

但是如果直接输入-1,-1%2不是1,-1/2=0就会直接跳出循环,无法正常计数,所以转换成为无符号整形;

(2)方法二

int countone(int m)
{int count = 0;int i = 0;for(i=0;i<32;i++){if ((m>>i) & 1  == 1){count++;}}return count;
}

这里的m右移i位和1进行按位与运算,32个比特位构成一个循环,依次进行判断输出最后的个数;

(3)方法三

通过这个我们发现m&(m-1)每次都能去掉二进制序列里面后面的一个数字1,这样就可以有几个1就进行几次循环,大大的提高了效率,相比于第二种方法很快,因为第二种无论是否为0都要进行判断,而这种只需要判断是0的数位,但是这种方法难以想到;

int countone(int m)
{int count = 0;while (m){count++;m = m & (m - 1);}return count;
}

这里要先进行加加操作,然后每一次就减少一个0;

2.把一个数字的二进制位的某一位0变成1再变成0

#include <stdio.h>
int main()
{int a = 13;a = a | (1<<4);printf("a = %d\n", a);a = a & ~(1<<4);printf("a = %d\n", a);return 0;
}

比如10:00000000  00000000  00000000  00001010把第5位变成0再恢复1

(1)变成0就是把把1左移4位,进行按位或操作,0变为1,后面的和0或操作,1还是1,0还是0,无影响;

(2)再变成0就是做以后取反和a进行按位与操作,原为数字1就变为0其他的和1进行,1还是1,0还是0

换成其他的数字,该方法也是用,只是需要左移n-1位,n是题目要求的第几位数字,这个例子第五

位进行变化,就左移4位

3.输入2个数字,判断他们的二进制位不同的位数

(1)先进行按位异或,相同就是0,不同就是1;

(2)统计1的个数,就回到了第一题的方法;

#include <stdio.h>
int main(){int a=0;int b=0;int c=0;int count=0;while(scanf("%d %d",&a,&b)!=EOF){c=a^b;while(c){c=c&(c-1);count++;}}printf("%d",count);return 0;
}

4.分别打印一个数字的二进制序列的奇数位和偶数位数字

void Printbit(int num)
{for (int i = 31; i >= 1; i -= 2){printf("%d ", (num >> i) & 1);}printf("\n");for (int i = 30; i >= 0; i -= 2){printf("%d ", (num >> i) & 1);}printf("\n");
}
int main()
{int m = 0;scanf("%d", &m);Printbit(m);return 0;
}

  这个主要难在如何打印:

(1)是1就打印1,是0就打印0;

(2)将这个二进制序列右移并和1进行按位与运算

例如:第一位是奇数位,向右移动31位,和1进行按位与运算,是1就打印1,是0就打印0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484761.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PX4学习笔记】07.PX4框架学习以及PX4中的PID

目录 文章目录 目录无人机实现飞行的控制流程PX4固件框架学习具体框架&#xff08;总体&#xff09;具体框架&#xff08;boards&#xff09;具体框架&#xff08;build&#xff09;具体框架&#xff08;SRC&#xff09;具体模块数据之间的关系 PX4中的PID代码体现uORB 其他QGC…

基础数据结构与相关C++ STL容器

文章目录 数组arrayvector 栈和队列dequestackqueue 堆heappriority_queue 链表listforward_list 树setmapmultisetmultimap 哈希表unordered_setunordered_mapunordered_multisetunordered_multimap 图 数组 array 不开口的连续线性空间&#xff0c;支持随机访问。 array是…

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器&#xff0c;centos8.2系统&#xff0c;docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程&#xff0c;负责协商加密算法和生成对称密钥&#xff0c;后续用此密…

【CVE-2024-21626】容器逃逸漏洞修复

哈喽大家好&#xff0c;我是咸鱼。 好久不见&#xff0c;最近有一个很火的 CVE——runc 容器逃逸漏洞。年前的时候我们已经在测试环境进行了相关操作打算年后线上进行修复。 因为今天咸鱼才开工&#xff0c;所以文章也就拖到了现在 &#x1f603; 漏洞介绍 简单来讲&#xf…

MongoDB学习笔记

1. 写在前面 最近工作用到了Mongodb&#xff0c;虽然有了gpt&#xff0c;对于这种数据库操作的代码基本上不用自己费多大功夫&#xff0c;但对于知识本身&#xff0c;还是想借机会系统学习下Mongodb的&#xff0c;原因是之前接触数据库一直都是mysql&#xff0c;oracle等关系型…

Redis篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、缓存雪崩**二、缓存穿透三、缓存预热四、缓存更新五、缓存降级 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女…

Sora:打开视频创作新纪元的魔法钥匙

随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着AI视频领域的创新发展。让我们将一起探讨Sora的技术特点、应用场景以及对未…

环境规制滞后一期数据集(2002-2020年)

时间范围&#xff1a;2002-2020年 参考文献&#xff1a; [1] 纪小乐, 薛启航, 魏建. 环境规制与数字经济&#xff1a;中国南北经济差异的诱致与扩大因素分析[J]. 中国人口资源与环境, 2023, 33 (12): 94-108. [2] 邹志明, 陈迅. 外商直接投资对技术创新与经济高质量发展的影…

qt-OPENGL-星系仿真

qt-OPENGL-星系仿真 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "model.h"Model::Model(QOpenGLWidget *_glWidget) { glWidget _glWidget;glWidget->makeCurrent();initializeOpenGLFunctions(); }Model::~Model() {destroyV…

Flink双流(join)

一、介绍 Join大体分类只有两种&#xff1a;Window Join和Interval Join Window Join有可以根据Window的类型细分出3种&#xff1a;Tumbling(滚动) Window Join、Sliding(滑动) Window Join、Session(会话) Widnow Join。 &#x1f338;Window 类型的join都是利用window的机制…

SpringIOC之support模块StaticApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…