C/C++ 位运算算法小练习(二)

一.十转二 进制

进制问题,主要需要将 数 % 要去的进制。/= 要去的进制。余数分别*自己的进制 N次方。

十转二,二转十

cpp 复制代码
int TtoB(int v)
{
	int result = 0;
	int Ten = 1;
	while (v != 0)
	{
		int d = v % 2;
		result += d * Ten;
		Ten *= 10;
		v /= 2;
	}
	return result;
}
cpp 复制代码
int BtoT(int v)
{
	int result = 0;
	int Two = 1;
	while (v != 0)
	{
		int d = v % 10;
		result += d*Two;
		Two *= 2;
		v /= 10;
	}
	return result;
}

二.位运算 实现 变量互换

这里主要使用异 运算符。每一个位 通过

A ^= B;

B ^= A;

A ^= B;

都能实现互换 1变为0. 0变为1

cpp 复制代码
	int A = 0;
	int B = 1;

	//1^0 = 1
	//0^0 = 0
	//1^0 = 1
	//1^1 = 0
	 
	A ^= B;
	B ^= A;
	A ^= B;

	std::cout << A;
	std::cout << B;

三.算数平方根

通过不断逼近,直道误差小于某一个值。

cpp 复制代码
double Sqrt(double value)  // 平替 UE的 FMath::Sqrt
{
	double ApproachValue = 1.0; //误差值 精度
	double Approach = 0;
	double SaveApproach = 0;
	do
	{
		Approach += ApproachValue;

		if (Approach * Approach < value)
		{
			Approach += ApproachValue;
		}
		else
		{
			SaveApproach = Approach;   //保存当时的 接近值
			Approach -= ApproachValue;//回退
			ApproachValue /= 10.0;  //逼近
		}
	} while (ApproachValue > 0.000001);
	return (Approach + SaveApproach) / 2.0;
}

	printf("%f", sqrt(100));
相关推荐
陌小呆^O^6 分钟前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
C++忠实粉丝6 分钟前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
Gu Gu Study12 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
时光の尘27 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
我们的五年31 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
以后不吃煲仔饭41 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师42 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者1 小时前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟1 小时前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟1 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel