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

news2024/10/7 20:36:57

一、奇数位与偶数位互换

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.coloradmin.cn/o/1697581.html

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

相关文章

THREE.JS中的向量点乘,以及他的几何意义。

1. THREE.JS中的向量点乘&#xff0c;以及他的几何意义 向量点乘的公式 : 2. 在three.js 中计算向量点乘 const a new THREE.Vector3(10, 10, 0); const b new THREE.Vector3(20, 0, 0); const dot a.dot(b);从这里可以看出&#xff0c;向量的点乘的结果是一个数字(标量…

嵌入式进阶——LED呼吸灯(PWM)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 PWM基础概念STC8H芯片PWMA应用PWM配置详解占空比 PWM基础概念 PWM全称是脉宽调制&#xff08;Pulse Width Modulation&#xff09…

安卓手机电脑平板均支持

最近随着人工智能的火热&#xff0c;越来越多人问我怎么设置&#xff0c;我这边主要提供简单的配置&#xff0c;能够实现想要的功能&#xff0c;不懂得的友友们可以私聊我&#xff0c;

一文读懂Apollo客户端配置加载流程

本文基于 apollo-client 2.1.0 版本源码进行分析 Apollo 是携程开源的配置中心&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的权限、流程治理等特性。 Apollo支持4个维度管理Key-Value格式的配…

MyBatis详细教程!!(入门版)

目录 什么是MyBatis&#xff1f; MyBatis入门 1&#xff09;创建工程 2&#xff09;数据准备 3&#xff09;配置数据库连接字符串 4&#xff09;写持久层代码 5&#xff09;生成测试类 MyBatis打印日志 传递参数 MyBatis的增、删、改 增&#xff08;Insert&#xff0…

OpenAI策略:指令层级系统让大模型免于恶意攻击

现代的大模型&#xff08;LLMs&#xff09;不再仅仅是简单的自动完成系统&#xff0c;它们有潜力赋能各种代理应用&#xff0c;如网页代理、电子邮件秘书、虚拟助手等。然而&#xff0c;这些应用广泛部署的一个主要风险是敌手可能诱使模型执行不安全或灾难性的行动&#xff0c;…

别人不愿意教,那我来教你Simulink建模(二)【语法知识】【原创分享】

文章目录 前言节点和状态的区别?local 和非 local 的区别?事件的作用?Bus 总线?Memory 模块?caller用法?自己瞎练习的(我也不知道为啥会多出来.h文件)自己瞎练习的(这个没有多出来.h文件)autosar实例学习前言 继续更新去年的博文系列,请君切记,师父领进门修行在个…

ant design pro 6.0列表渲实践demo

ant design pro 用户列表渲实践 用户页面&#xff1a; src\pages\Admin\User\index.tsx import { PlusOutlined } from ant-design/icons; import type { ActionType, ProColumns, ProDescriptionsItemProps } from ant-design/pro-components; import {PageContainer,ProDe…

JAVA方法引用,异常,File,IO流知识总结

文章目录 JAVA第六周学习笔记方法引用引用静态方法引用成员方法引用构造方法其他调用方式使用类名引用成员方法引用数组的构造方法 异常作用处理方式常见成员方法抛出异常finally自定义异常 File路径构造方法**判断、获取****创建 、删除****获取并遍历**练习 IO流体系字节流Fi…

软件设计师备考笔记(十):网络与信息安全基础知识

文章目录 一、网络概述二、网络互连硬件&#xff08;一&#xff09;网络的设备&#xff08;二&#xff09;网络的传输介质&#xff08;三&#xff09;组建网络 三、网络协议与标准&#xff08;一&#xff09;网络的标准与协议&#xff08;二&#xff09;TCP/IP协议簇 四、Inter…

Linux基础(八):计算机基础概论

本篇博客简单介绍计算机的基础知识&#xff0c;为后续学习做个铺垫。 目录 一、计算机的基本组成 1.1 计算机组成五大部件 1.1.1 运算器&#xff08;Arithmetic Logic Unit&#xff0c;ALU&#xff09; 1.1.2控制器 &#xff08;Control Unit&#xff0c;CU&#xff09; …

详解 Cookies 和 WebStorage

Cookies 和 WebStorage Cookies 和 WebStorageCookies简要介绍操作 Cookies&#xff08;document.cookie&#xff09;不足之处 WebStorage简要介绍LocalStorage Vs. SessionStorage操作 WebStorage 三种数据存储方式的对比分析共性差异 REFERENCES Cookies 和 WebStorage Cook…

某钢铁企业数字化转型规划案例(114页PPT)

案例介绍&#xff1a; 该钢铁企业的数字化转型案例表明&#xff0c;数字化转型是钢铁企业应对市场竞争、提高生产效率、降低成本、优化资源配置和降低能耗排放的重要手段。通过引入先进的技术和管理理念&#xff0c;加强员工培训和人才引进&#xff0c;企业可以成功实现数字化…

【Java】欸...?我学集合框架?真的假的?

【Java】欸…&#xff1f;我学集合框架&#xff1f;真的假的&#xff1f; Java集合框架 概述 Java集合框架主要由以下几个部分组成&#xff1a; 接口&#xff08;Interfaces&#xff09;&#xff1a;定义了集合的基本操作&#xff0c;如添加、删除、遍历等。实现&#xff0…

【wiki知识库】01.wiki知识库前后端项目搭建(SpringBoot+Vue3)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 &#x1f33c;环境准备 想要搭建自己的wiki知识库&#xff0c;要提前搭建好自己的开发环境&#xff0c;后端我使用的是SpringBoot&#xff0c;前端使用的是Vue3&#xff0c;采用前后端分离的技术实现。同时使用了Mysql数…

2 使用香橙派AIpro报错 No module named ‘acllite utils‘

当使用jupyter运行香橙派的notebooks下面的案例的时候启动使用jupyter lab 然后自动跳转到jupyter页面。如下图: 这是自动跳转过来的。然后运行下面的包的导入后报错: 报错为No module named ‘acllite utils’,那么我们打开notebooks文件夹下面的start_notebooks.sh文件:…

【全开源】多功能投票小程序(ThinkPHP+FastAdmin+Uniapp)

打造高效、便捷的投票体验 一、引言 在数字化快速发展的今天&#xff0c;投票作为一种常见的决策方式&#xff0c;其便捷性和效率性显得尤为重要。为了满足不同场景下的投票需求&#xff0c;我们推出了这款多功能投票小程序系统源码。该系统源码设计灵活、功能丰富&#xff0…

分享:怎么才能保证大数据查询的准确性?

随着大数据应用到金融风控领域&#xff0c;大数据越来越重要了&#xff0c;很多朋友在查大数据的时候都会遇到一个问题&#xff0c;那就是自己查询的大数据什么信息都没有&#xff0c;要么就是很少&#xff0c;这是什么原因呢?要怎么才能保证大数据查询的准确性呢?下面小编就…

有什么免费视频翻译软件?安利5款视频翻译软件给你

随着“跨文化交流”话题的热度不断攀升&#xff0c;越来越多的视频内容跨越国界&#xff0c;触及全球观众。 在这一趋势下&#xff0c;视频翻译行业迎来了巨大的发展机遇。然而&#xff0c;面对众多的视频翻译工具&#xff0c;如何挑选出最合心意的那款呢&#xff1f; 现在&a…

RPA+AI 应用案例集合:自动推流直播

使用场景&#xff1a; 自动定时推流直播 使用技术&#xff1a; python playwright 每个解决一个小问题 During handling of the above exception, another exception occurred:Traceback (most recent call last): File "D:\pythonTryEverything\putdonwphone\not_watch_…