当前位置: 首页 > article >正文

大一计算机的自学总结:位运算实现加减乘除

前言

位运算当然可以用来实现加减乘除。

一、加法

#include<bits/stdc++.h>
using namespace std;int add(int a,int b)
{int ans=a;while(b!=0){ans=a^b;b=(a&b)<<1;a=ans;}return ans;
}int main()
{int a,b;cout<<"a,b:"<<endl;cin>>a>>b;cout<<add(a,b);return 0;
}

 加法的原理就是利用了异或运算的本质:无进位加法再加上进位信息所得。

先让ans=a,然后只要b不等于0,先取两数的异或,即无进位加法;之后取两数进位信息,若两数在相同数位上都为1,所以该位进位,就是a&b。然后为了将进位信息加到ans中,要将a&b的的结果左移一位,直到两数没有进位信息。

二、减法

#include<bits/stdc++.h>
using namespace std;int add(int a,int b)
{int ans=a;while(b!=0){ans=a^b;b=(a&b)<<1;a=ans;}return ans;
}int neg(int n)
{return add(~n,1);
}int sub(int a,int b)
{return add(a,neg(b));
}int main()
{int a,b;cout<<"a,b:"<<endl;cin>>a>>b;cout<<sub(a,b);return 0;
}

 减法就很简单了,转化成a+(-b)即可,而-b就是~b+1。

三、乘法

#include<bits/stdc++.h>
using namespace std;int add(int a,int b)
{int ans=a;while(b!=0){ans=a^b;b=(a&b)<<1;a=ans;}return ans;
}int mult(int a,int b)
{int ans=0;while(b!=0){if((b&1)!=0){ans=add(ans,a);}a<<=1;b>>=1;}return ans;
}int main()
{int a,b;cout<<"a,b:"<<endl;cin>>a>>b;cout<<mult(a,b);return 0;
}

 乘法依旧借助了竖式运算的原理,只不过这里是按二进制数位进行的。

若b的最后一位是1,就让ans再加上一个a,之后,要将a左移1位,并且为了取b的下一个数位,要让b右移一位。

四、除法

#include<bits/stdc++.h>
using namespace std;int add(int a,int b)
{int ans=a;while(b!=0){ans=a^b;b=(a&b)<<1;a=ans;}return ans;
}int neg(int n)
{return add(~n,1);
}int sub(int a,int b)
{return add(a,neg(b));
}int divide(int a,int b)
{int x=a<0?neg(a):a;int y=b<0?neg(b):b;int ans=0;for(int i=30;i>=0;i--){if((x>>i)>=y){ans|=(1<<i);x=sub(x,y<<i);}}return (a<0)^(b<0)?neg(ans):ans;
}int main()
{int a,b;cout<<"a,b:"<<endl;cin>>a>>b;cout<<divide(a,b);return 0;
}

除法借助的原理是,例如280除以25,只保留商,可以将280转化成25*2^3+25*2^1+25*2^0。

首先先将负数转为正数,然后从第30位开始到第0位,若x右移i位比y大,即x还包含2^i个y,所以往ans的第i位里或进去一个1,之后让x减去2^i个y即可。最后这个判断很妙,只有a和b异号时才返回-ans。

总结

感觉位运算实现加减乘除在做题上没什么用,就当训练位运算了。()

END

相关文章:

大一计算机的自学总结:位运算实现加减乘除

前言 位运算当然可以用来实现加减乘除。 一、加法 #include<bits/stdc.h> using namespace std;int add(int a,int b) {int ansa;while(b!0){ansa^b;b(a&b)<<1;aans;}return ans; }int main() {int a,b;cout<<"a,b:"<<endl;cin>&g…...

《LLM大语言模型+RAG实战+Langchain+ChatGLM-4+Transformer》

文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…...

天融信 NGFW2.3 mibs

1. 新节点 库节点名称含义OID数据类型权限私有库tosRouteEntryrouteNetDst路由目地址1.3.6.1.4.1.14331.5.5.1.8.1.3OCTET STRINGread-only私有库tosRouteEntryrouteWeight路由权重1.3.6.1.4.1.14331.5.5.1.8.1.9Integer32read-only私有库tosRouteEntryrouteProbeID路由探测ID…...

进程控制的学习

目录 1.进程创建 1.1 fork函数 1.2 fork函数返回值 1.3 写时拷贝 1.4 fork 常规用法 1.5 fork 调用失败的原因 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 2.2.1 从main 返回 2.2.2 echo $&#xff1f; 查看进程退出码 2.2.2.1 我们如何得到退出码代表的含…...

rsync安装与使用-linux015

使用 rsync 可以非常高效地将文件或目录从一个服务器传输到另一个服务器。 能力&#xff1a; 支持 64 位文件、64 位 inode、64 位时间戳、64 位长整型支持套接字对、符号链接、符号链接时间、硬链接、硬链接特殊文件、硬链接符号链接支持 IPv6、访问时间&#xff08;atimes&…...

Formality:时序变换(二)(不可读寄存器移除)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 一、引言 时序变换在Design Compiler的首次综合和增量综合中都可能发生&#xff0c;它们包括&#xff1a;时钟门控(Clock Gating)、寄存器合并(Register Merging)、…...

前端实战:小程序搭建商品购物全流程

目录 项目概述 开发环境搭建 微信开发者工具下载与安装 项目创建流程 项目目录结构及各文件作用 商品展示页面开发 页面布局&#xff08;WXML 与 WXSS&#xff09; 数据获取与绑定&#xff08;JavaScript&#xff09; 加入购物车功能实现 购物车功能开发 购物车页面布…...

Python中的函数(下)

函数返回值 返回单个值 函数可以通过 return 语句返回一个值。一旦执行到 return 语句&#xff0c;函数就会停止执行&#xff0c;并将指定的值返回给调用者。例如&#xff1a; 返回多个值 实际上&#xff0c;Python函数只能返回一个值&#xff0c;但可以通过返回一个元组来模…...

探索AI(chatgpt、文心一言、kimi等)提示词的奥秘

大家好&#xff0c;我是老六哥&#xff0c;我正在共享使用AI提高工作效率的技巧。欢迎关注我&#xff0c;共同提高使用AI的技能&#xff0c;让AI成功你的个人助理。 "AI提示词究竟是什么&#xff1f;" 这是许多初学者在接触AI时的共同疑问。 "我阅读了大量关于…...

Linux运维之Linux的安装和配置

目录 Linux的基本概念&#xff1a; 1.为什么要使用Linux&#xff1f; 2.什么是Linux&#xff1f; Linux的安装和配置&#xff1a; 1.下载Linux的虚拟机和镜像文件&#xff1a; 1.1下载虚拟机 1.2下载镜像文件 2.在虚拟机或者物理机中安装Linux操作系统 3.配置虚拟机的…...

【深度分析】微软全球裁员计划不影响印度地区,将继续增加当地就业机会

当微软的裁员刀锋掠过全球办公室时&#xff0c;班加罗尔的键盘声却愈发密集——这场资本迁徙背后&#xff0c;藏着数字殖民时代最锋利的生存法则。 表面是跨国公司的区域战略调整&#xff0c;实则是全球人才市场的地壳运动。微软一边在硅谷裁撤年薪20万美金的高级工程师&#x…...

联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署

直接上手搓了&#xff1a; conda create -n myenv python3.10 -ygit clone https://github.com/deepseek-ai/Janus.gitcd Januspip install -e .pip install webencodings beautifulsoup4 tinycss2pip install -e .[gradio]pip install pexpect>4.3python demo/app_januspr…...

Spring Boot 无缝集成SpringAI的函数调用模块

这是一个 完整的 Spring AI 函数调用实例&#xff0c;涵盖从函数定义、注册到实际调用的全流程&#xff0c;以「天气查询」功能为例&#xff0c;结合代码详细说明&#xff1a; 1. 环境准备 1.1 添加依赖 <!-- Spring AI OpenAI --> <dependency><groupId>o…...

【MQ】探索 Kafka

高性能 消息的顺序性、顺序写磁盘 零拷贝 RocketMQ内部主要是使用基于mmap实现的零拷贝&#xff0c;用来读写文件 减少cpu的拷贝次数和上下文切换次数&#xff0c;实现文件的高效读写操作 Kafka 零拷贝 Kafka 使用到了 mmap 和 sendfile 的方式来实现零拷贝。分别对应 Jav…...

指针(C语言)从0到1掌握指针,为后续学习c++打下基础

目录 一&#xff0c;指针 二&#xff0c;内存地址和指针 1&#xff0c;什么是内存地址 2&#xff0c;指针在不同系统下所占内存 三&#xff0c;指针的声明和初始化以及类型 1,指针的声明 2,指针 的初始化 1&#xff0c; 初始化方式优点及适用场景 4,指针的声明初始化类型…...

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)

文章目录 一、成绩查询模块实现1、学生成绩查询功能实现1.1 页面设计1.2 前端页面实现1.3 后端功能实现2、成绩分段查询功能实现2.1 页面设计2.2 前端页面实现2.3 后端功能实现二、试卷练习模块实现三、我的分数模块实现1、 页面设计2、 前端页面实现3、 后端功能实现四、交流区…...

AI DeepSeek-R1 Windos 10 环境搭建

1、安装&#xff1a; 下载 Python |Python.org CUDA Drivers for MAC Archive | NVIDIA pip 和virtualenv Download Ollama on Windows 如下图 2、下载模型 deepseek-r1 ollama run deepseek-r1 或者可以ollama run deepseek-r1:8b 或 3、安装一个可视化对话Chatbox 下载 …...

搜索与图论复习1

1深度优先遍历DFS 2宽度优先遍历BFS 3树与图的存储 4树与图的深度优先遍历 5树与图的宽度优先遍历 6拓扑排序 1DFS&#xff1a; #include<bits/stdc.h> using namespace std; const int N10; int n; int path[N]; bool st[N]; void dfs(int u){if(nu){for(int i0;…...

10.共享内存 信号量集 消息队列

10.共享内存 信号量集 消息队列 **1. IPC对象操作通用框架****2. 共享内存&#xff08;Shared Memory&#xff09;****3. 信号量集&#xff08;Semaphore&#xff09;****4. 消息队列&#xff08;Message Queue&#xff09;****5. 练习与作业****6. 总结** 1. IPC对象操作通用框…...

每日 Java 面试题分享【第 17 天】

欢迎来到每日 Java 面试题分享栏目&#xff01; 订阅专栏&#xff0c;不错过每一天的练习 今日分享 3 道面试题目&#xff01; 评论区复述一遍印象更深刻噢~ 目录 问题一&#xff1a;Java 中的访问修饰符有哪些&#xff1f;问题二&#xff1a;Java 中静态方法和实例方法的区…...

【懒删除堆】力扣2349. 设计数字容器系统

设计一个数字容器系统&#xff0c;可以实现以下功能&#xff1a; 在系统中给定下标处 插入 或者 替换 一个数字。 返回 系统中给定数字的最小下标。 请你实现一个 NumberContainers 类&#xff1a; NumberContainers() 初始化数字容器系统。 void change(int index, int numb…...

【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用

论文信息 标题: VOLO: Vision Outlooker for Visual Recognition作者: Li Yuan, Qibin Hou, Zihang Jiang, Jiashi Feng, Shuicheng Yan代码链接: https://github.com/sail-sg/volo论文链接: https://arxiv.org/pdf/2106.13112 创新点 前景注意力机制: VOLO引入了一种称为“…...

有效运作神经网络

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 训练集、验证集、测试集偏差、方差正则化正则化参数为什么正则化可以减少过拟合Dropout正则化Inverted Dropout其他的正则化方法数据增广Early stopping 归一化梯度消失与梯度爆…...

Vue 组件开发:构建高效可复用的前端界面要素

1 引言 在现代 Web 开发中,构建高效且可复用的前端界面要素是提升开发效率和用户体验的关键。Vue.js 作为一种轻量级且功能强大的前端框架,提供了丰富的工具和机制,帮助开发者快速构建高质量的应用程序。通过合理设计和封装 Vue 组件,我们可以实现组件的高效复用,提高开发…...

【Python】深入探索Python元类:动态生成类与对象的艺术

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 元类是Python中一个高级且强大的特性,允许开发者在类的创建过程中插入自定义逻辑,从而动态生成类和对象。本文将全面介绍Python中的元类概…...

Spring Boot + Facade Pattern : 通过统一接口简化多模块业务

文章目录 Pre概述在编程中&#xff0c;外观模式是如何工作的&#xff1f;外观设计模式 UML 类图外观类和子系统的关系优点案例外观模式在复杂业务中的应用实战运用1. 项目搭建与基础配置2. 构建子系统组件航班服务酒店服务旅游套餐服务 3. 创建外观类4. 在 Controller 中使用外…...

在Linux系统上安装.NET

测试系统&#xff1a;openKylin(开放麒麟) 1.确定系统和架构信息&#xff1a; 打开终端&#xff08;Ctrl Alt T&#xff09;&#xff0c;输入cat /etc/os-release查看系统版本相关信息。 输入uname -m查看系统架构。确保你的系统和架构符合.NET 的要求&#xff0c;如果架构…...

OpenAI Operator:AI Agent 大战的号角,从 “工具” 到 “助手” 的飞跃

想尝试不同的 AI 模型&#xff1f;不必到处寻找&#xff01;chatTools 为您集成了 o1、GPT4o、Claude 和 Gemini 等多种选择&#xff0c;一个平台解决您的所有 AI 需求。现在就来体验吧&#xff01; 各位 AI 爱好者们&#xff0c;今天我们来聊聊 OpenAI 的最新力作——Operator…...

AI大模型开发原理篇-9:GPT模型的概念和基本结构

基本概念 生成式预训练模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型 是由 OpenAI 开发的基于 Transformer 架构的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;专门用于文本生成任务。它的设计理念在于通过大规模的预训练来学习语言模…...

Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]

大会官网&#xff1a;www.icisccn.net Java Swing 是一个功能强大的 GUI 工具包&#xff0c;提供了丰富的组件库用于构建跨平台的桌面应用程序。本文将详细讲解 Swing 的基础组件&#xff0c;包括其作用、使用方法以及示例代码&#xff0c;帮助你快速掌握 Swing 的核心知识。 一…...