C语言——小知识和小细节19

一、奇数位与偶数位互换

1、题目介绍

实现一个宏,将一个整数的二进制补码的奇数位与偶数位互换。输出格式依旧是十进制整数。示例:

2、分析

既然想要交换奇数位和偶数位上的数字,那么我们就要先得到奇数位和偶数位上的数字,那么如何得到呢。我们可以使用以下方法(以下的二进制都是补码):

将目的转换数字按位与上一个偶数位全是1奇数位全是0的特殊数字,就可以得到一个数字,这个数字奇数位上都为0,偶数位上的数字与目的转换数字的偶数位上一样,这里的特殊数字为01010101 01010101 01010101 01010101 转换为十进制为1431655765,这里可以直接使用十六进制0x55555555。同理,得到奇数位使用下面的方法,但是这个特殊的数字就是一个负数了:

这里的特殊数字为10101010 10101010 10101010 10101010 由于这里是补码,符号位为1,为负数,转换为原码为11010101 01010101 01010101 01010110 ,转换为十进制为-1431655766。我们这里可以直接使用十六进制,十六进制的话就不用从补码转换为原码了,可以直接使用补码转换为十六进制0xaaaaaaaa。

这样我们就得到了目的转换数字的奇数位和偶数位上的数字了,然后我们就要将奇数位和偶数位调整一下位置,将奇数位移到偶数位置,也就是右移一位,将偶数位移到奇数位置,也就是左移一位:

然后将调整位置后的两个奇数位和偶数位的数字按位或,就可以得到结果,结果为00000000000000000001011011101 ,转换为十进制就是1501,与上面的示例结果相同。

3、代码

以下为具体代码实现:

#include <stdio.h>// 定义宏来交换奇数位和偶数位
#define SWAP_ODD_EVEN_BITS(n) (((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1))int main() {int num = 2798;int result = SWAP_ODD_EVEN_BITS(num);printf("Original number: %d\n", num);printf("Number after swapping odd and even bits: %d\n", result);return 0;
}

运行结果:

二、将空格替换为%20

将一个字符串中的空格全部替换成%20。

1、方法一

只要读取到一个空格则将空格后面的字符串向后移两位,然后从空格这里加入%20。

代码:

#include <stdio.h>
#include <assert.h>
#include <string.h>void Convert(char* str) {assert(str);char* string = str;while (*string) {if (*string == ' ') {int len = (int)strlen(string);char* temp = string + len + 2;while(len) {*temp = *(temp - 2);temp--;len--;}*string = '%';*(string + 1) = '2';*(string + 2) = '0';string += 2;}string++;}
}int main() {char str[120] = "i love you.  olive juice";Convert(str);printf("%s\n", str);return 0;
}

运行结果:

2、方法二

首先统计空格的个数,然后使用两个下标,因为一个空格扩充到%20就多出两个字符,所以第一个下标在字符长度加上二乘上空格的个数处,第二个下标在字符串的 \0 字符处,然后从后向前遍历字符串,当前面的下标遇到空格,则后面的下标开始填充%20,直到两个下标相遇。

代码:

#include <stdio.h>
#include <assert.h>
#include <string.h>void Convert(char* str) {assert(str);char* string = str;int space_num = 0;while (*string) {if (*string == ' ') {space_num++;}string++;}int left = (int)strlen(str);int right = (int)strlen(str) + space_num * 2;while (left != right) {if (str[left] == ' ') {str[right] = '0';str[right - 1] = '2';str[right - 2] = '%';right -= 2;}else {str[right] = str[left];}left--;right--;}
}int main() {char str[120] = "i love you.  olive juice";Convert(str);printf("%s\n", str);return 0;
}

运行结果:

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

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

相关文章

又有人叫嚣:AI取代前端,来给你几张图,看能不能憋死AI。

总有自媒体人&#xff0c;为了些许流量&#xff0c;在大放厥词&#xff0c;说截个图给AI&#xff0c;AI就能输出前端代码&#xff0c;这是啥都敢说&#xff0c;吹牛不上税。 我来给你几张贝格前端工场日常接的大数据项目相关的图&#xff0c;你让AI生成代码&#xff0c;取代前…

Youngter-drive

BUUCTF逆向题Youngter-drive-CSDN博客 逆向每日一题----Youngter-drive题解-CSDN博客 借鉴博客,写得比我好 upx拖壳 upx -d Youngter-drive.exe 这道题我不知道为什么,我这里是运行不了的,也没有找到原因 int __cdecl main_0(int argc, const char **argv, const char **env…

Nginx 的原理解析 worker 配置及相关问题 -细节狂魔

文章目录 前言Nginx 的最基本的执行过程&#xff08;master & worker&#xff09;worker 是如何进行工作的 一个 master 和 多个 woker 有哪些好处1、可以使用 nginx 热部署2、节省资源 && worker 进程之间互不影响 && nginx 服务不会中断 woker 设置多少才…

【知识图谱】探索攻略:基础、构建、高级应用与相关论文方向

【知识图谱】相关文章汇总 写在最前面一、什么是知识图谱&#xff1f;二、相关历史文章代码实现&#xff1a;简单的知识图谱可视化知识图谱前身&#xff1a;信息抽取知识图谱应用1&#xff1a;社交网络分析知识图谱应用2&#xff1a;威胁情报挖掘知识图谱应用3&#xff1a;Code…

Python小游戏——俄罗斯方块

文章目录 项目介绍环境配置代码设计思路1.初始化和导入库&#xff1a;2.定义颜色和屏幕尺寸&#xff1a;3.定义游戏逻辑&#xff1a;4.游戏循环&#xff1a; 源代码效果图 项目介绍 俄罗斯方块游戏是一款经典的益智游戏&#xff0c;玩家通过旋转和移动各种形状的方块&#xff…

【NumPy】关于numpy.clip()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

Gradle筑基——Gradle Maven仓库管理

基础概念&#xff1a; 1.POM pom:全名Project Object Model 项目对象模型&#xff0c;用来描述当前maven项目发布模块的基础信息 pom主要节点信息如下&#xff1a; 配置描述举例&#xff08;com.android.tools.build:gradle:4.1.1&#xff09;groupId组织 / 公司的名称com.…

初学Echart

创建一个html文件 1.引入 点击链接----快速上手网址&#xff1a;快速上手 - 使用手册 - Apache ECharts 复制这一串【这个是引入echart路径】 引入到这里 2.使用 我们在上一步---点击返回--往下翻---找到完整代码--复制黏贴 复制粘贴后--总体长这样 <!DOCTYPE html> &…

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型 前言 整了一个在C# Winform中调用文生图Stable Diffusion XL的小程序&#xff0c;基于百度智能云千帆平台 步骤 如何注册百度智能云和创建应用&#xff0c;获取API 密钥等和在之前的博客中基本相同&#…

[C++]debug介绍+debug时如何查看指针指向内存处的值

一、简介 预备工具和知识&#xff1a;使用使用VSCode使用Debug。 本文简介&#xff1a;本文将简要介绍debug中Continue&#xff0c;Step Over&#xff0c;Step Into和Restart的功能。并介绍如何在debug时查看动态内存地址&#xff08;指针&#xff09;的值&#xff1b; 二、D…

连公司WiFi后,无法访问外网,怎么回事,如何解决?

文章目录 封面问题描述问题探究什么是DNS&#xff1f;分布式&#xff0c;层次数据库如何理解分布式&#xff1f;如何理解层次&#xff1f; 本地DNS服务器迭代查询&#xff0c;递归查询DNS缓存参考资料 封面 问题描述 从甲方项目组返回公司后&#xff0c;我习惯性连上公司WiFi&…

视频号小店去哪里找货源?最全货源渠道分享!

大家好&#xff0c;我是电商糖果 视频号小店因为是这两年电商行业新出来的黑马&#xff0c;吸引着不少商家入驻。 入驻了商家中很多都没有自己的货源渠道。 他们基本都是从无货源开始起步&#xff0c;后期通过积累资源&#xff0c;慢慢搭建属于自己的货源渠道。 可是渐渐的…

算法的时间与空间复杂度

算法是指用来操作数据、解决程序问题的一种方法。对于同一问题&#xff0c;使用不同的算法&#xff0c;也许最终结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。 那我们该如何去衡量不同算法之间的优劣呢&#xff1f;主要还是从算法所占用的【时间】和…

5.26机器人基础-空间描述和变换-总结

非目录 方便我找 重点 逆解 位姿矩阵的几何意义 实际坐标需要除以比例因子才能得到 比例因子的好处&#xff1a;在计算机的储存更加简单方便&#xff0c;例如x,y,x原先很大时&#xff0c;等比例改变 位姿坐标的齐次变换&#xff1a;左乘齐次坐标 从端点到末端&#xff0c…

集合竞价选股策略实战测试

2.3.2版本发布的集合竞价选股策略是网友吴PSYP提供的&#xff0c;团队按照策略实现的选股算法&#xff0c;最近半个月对策略进行的实战测试&#xff0c;从集合竞价选股开始&#xff0c;到股票收盘&#xff0c;收盘价格大于集合竞价价格&#xff0c;算作盈利&#xff0c;测试结果…

Vision Mamba论文阅读(主干网络)

这几天被Mamba刷屏了&#xff0c;又由于本人是做视觉方面任务的&#xff0c;固来看看mamba在视觉上的应用。 今天分享的是Vision Mamba: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 论文网址&#xff1a;https://arxiv.or…

火山引擎“奇袭”阿里云

图片&#xff5c;电影《美国队长3》剧照 ©自象限原创 作者丨程心 编辑丨罗辑 大模型价格战&#xff0c;已经不是什么新闻。 从OpenAI发布GPT-4o&#xff0c;将API价格下调50%&#xff0c;并宣布面向普通用户免费开始&#xff0c;就标志着大模型的竞争从性能进入到了成本…

【机器学习】期望最大化(EM)算法

文章目录 一、极大似然估计1.1 基本原理1.2 举例说明 二、Jensen不等式三、EM算法3.1 隐变量 与 观测变量3.2 为什么要用EM3.3 引入Jensen不等式3.4 EM算法步骤3.5 EM算法总结 参考资料 EM是一种解决 存在隐含变量优化问题 的有效方法。EM的意思是“期望最大化&#xff08;Exp…

Aloha机械臂的mujoco仿真问题记录

今天在测试ACT代码时&#xff0c;遇到了仿真中的机械臂无法摆放正确的姿势来抓去红色方块。 后来经过测试&#xff0c;发现应该是python包的版本问题有误&#xff0c;下面记录下正确的包版本&#xff1a; 官方给出的包&#xff1a; conda create -n aloha python3.8.10 conda…

vue3 ts问题 找不到模块“@/views/home/index.vue”或其相应的类型声明。

1. 找不到模块“/views/HomeView.vue”或其相应的类型声明 今天帮同事看了一个问题&#xff0c;他尝试用vitevue3tspinia创建项目&#xff0c;结果刚上来就遇到这么一个问题 2. 解决办法 出现这个问题的原因就是&#xff1a;ts只支持导出导入模块&#xff0c;但是vue不是模块…