浅谈C++位运算----赠送进制转换代码

C/C++编程日记:十六进制字符串转换为十进制整数(代码实现) 代码实现十六进制字符串转换为十进制整数的方法,具体实现如下: /* * 将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值 */ #include <stdio.h> #include <math.h> /* 将十六进制中的字符装换为对应的整数 */ inthexchtoi(charhexch ) { charphexch[] ="ABCDEF"; charqhexch[] ="abcdef"; inti; ... 阅读详情

我又来水文章了!

众所周知,c++中的位运算是一种极其不易驯服掌握的运算,所以今天就来盘点一下c++的位运算(文末有进制转换的代码和注释)

大纲

中间的是示例

左移:<<                                1001010<<2=0101000                       所有位向左移(有溢出)

右移:>>                                1001010>>2=0010010                       所有位向右移(有溢出)

按位与:&                               1001010&1000010=1000010            两数同位都为1则为1

按位或:|                                1001010|1100101=1101111               两数同位有1则为1

按位异或:^                            1001010^1000101=0001111             两数同位不同则为1

按位取反:~                            ~1001010=0110101                          0变1,1变0

注意点 

使用左移(<<)和右移(>>)是数据会溢出或补充,什么意思呢?用左移举个栗子

100100100<<2,就是把100100100左移2位

左移前:

100100100

左移:

10010010000

红色部分溢出了,将被移出数字,绿色的两个0是被补充的数字

所以最终的结果是:

010010000

按位与、按位或、按位异或用竖式表示会更清楚,下面用按位与举例

                                                                

                                101010001010

                             & 100010101000

                          -------------------------------

                                100010001000 

处在同一列上的数字如果都是1,那么在结果中这一位就是1(标红了)

按位取反符号“~”在需要处理的数字前,前面不需要任何数字

福利

 赠送一个进制转换的代码(含注释)

#include<bits/stdc++.h>
using namespace std;
int n,m;                                          //n是输入的数字的进制,m是需要转换为的进制
string a,b;                                       //a是转换前的数字,b是转换后的数字
int to10(string a)                                //把输入的n进制数转换为10进制
{
	int num=0;
	for(int i=0;i<a.size();i++)
	{
		if(a[i]>='0' && a[i]<='9')
		{
			num=num+(a[i]-'0')*pow(n,a.size()-i-1);//按位权值转换为十进制
		}
		else
		{
			num=num+(a[i]-55)*pow(n,a.size()-i-1);
		}
	}
	return num;
}
void tom(int num)                                //把处理出的10进制数转换为m进制(是个递归)
{
	if(num!=0)
	{
		int yu=num%m;                            //短除法转换为m进制
		tom(num/m);
		char c;
		if(yu<10)
		{
			c+=yu+'0';
		}
		else
		{
			c+=yu+55;
		}
		b+=c;
	}
}
int main()
{
	cin>>n;
	cin>>a;
	int num=to10(a);
	cin>>m;
	tom(num);
	cout<<b;
	return 0;
}

如果你点赞,我会很开心

软考中级-软件设计师 知识点整理(一篇就过了 建议收藏) 软考中级-软件设计师上午题知识点总结 阅读详情

相关推荐

如何判断一个程序员的技术比你强?

技术大佬与普通程序员之间存在明显的认知差异:前者善于将复杂问题抽象为经典计算机科学问题,用声明式代码替代过程式逻辑;对异常和边界条件极度敏感,具备系统化的排查方法论;代码追求高可读性而非炫技,且执着于底层原理研究。这种技术压制体现在解决问题的确定性上——通过扎实的理论功底和工程直觉,快速定位问题本质,而非依赖试错或搜索。真正的技术实力源于对底层逻辑的深刻理解和对系统稳定性的敬畏。

wldtzzming的专栏 1088

c++中计算2得n次方_比特与信息在计算机中的表示及补码和浮点数的IEEE 754标准...

1 什么是比特?比特(bit,binary digit的缩写)中文翻译为“二进位数字”、“二进位” 或简称为 “位”。比特只有 2 种取值:0和1,一般无大小之分。如同DNA是人体组织的最小单位、原子是物质的最小组成单位一样,比特是组成数字信息的最小单位。数值、文字、符号、图像、声音、命令······都可以使用比特来表示。2 比特的三种基本逻辑运算比特的取值“0”和“1” 可表示两种不同的状态(例...

weixin_39786141的博客 970

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 551

C语言基础---1.比特位与字节的关系,二进制、八进制、十六进制之间的转换,内存为什么使用十六进制?

文章目录1.计算机为什么采用二进制?2.为什么引入字节?3.为什么一个字节是8位二进制,而不是其他数目?4.为什么引入八进制、十六进制?(1)二进制转换?(2)十六进制转换? 1.计算机为什么采用二进制? 因为二进制是在电路中最好控制的,只有1和0两种状态.代表接通和关闭电路的状态 2.为什么引入字节? 1字节(byte,字节)= 8 bit 字节(Byte /bait/ n. [C])是计...

Alien-Hu 9907

FUMA实战:5分钟搞定GWAS数据中的Independent SNPs和Lead SNPs筛选

本文详细介绍了如何使用FUMA平台快速筛选GWAS数据中的Independent SNPs和Lead SNPs。通过解析核心概念、分步实战演示和结果解读,帮助研究人员在5分钟内从海量显著关联位点中提炼出独立且具代表性的遗传信号,为后续功能注释和基因定位奠定高效基础。

weixin_29201859的博客 425

pix4d安装步骤

pix4d三维模型软件的安装步骤

Little_Bee_27000的博客 1万+

C++的位运算

(1&lt;&lt;8)&amp;0xFF00即 (1 * 2^8) &amp; 0xFF00 = 0x0100 &amp; 0xFF00 = 0x0100。0x0001左移八位等于0x0100 再与上0xff00 结果为0x0100。。只有这一句话只能这样了,意图可能是串行传数据,分离出每个bit位用的吧。。位运算总共只有5种运算:与、或、异或、左移、右移。如下表:与(&amp;)0 &amp;...

L的博客 1996

新手必看:如何用PhaGCN2和vConTACT2搞定宏病毒组注释(附避坑指南)

本文为宏病毒组研究新手提供了使用PhaGCN2和vConTACT2进行病毒注释的完整实战指南。内容涵盖从Conda环境配置、软件安装、参数解析到结果解读的全流程,并重点分享了整合双工具进行交叉验证的策略与常见报错解决方案,旨在帮助研究者高效、准确地完成病毒分类注释工作。

j2k3l4的博客 797

C++ 进制数专题

算法笔记,进制数专题

Angindem博客 503

【30天从零玩转AI应用开发】第16篇:智能体Agent入门——ReAct框架原理+首个会思考、会动手的AI实战

摘要: 本文介绍了AI智能体(Agent)的核心概念及其与普通大模型(LLM)的区别。通过ReAct(Reason+Act)框架,智能体实现了自主思考、调用工具和分步执行的能力。文章详细讲解了LangChain Agent的四大组件,并推荐新手使用ZERO_SHOT_REACT_DESCRIPTION类型。最后提供了一个完整的智能体实战代码示例,该智能体具备数学计算和天气查询功能,能够自主选择工具完成任务,展示了AI从”被动回答“到”主动行动“的关键进化。

在上海谋生的软件喵记录喵生 626

哨兵1号回波数据(L0级)包格式解析与成像参数提取

提取哨兵1号数据包的辅助数据、回波数据、定标数据。matlab代码在文末

3125

【C++算法】进制转换(十进制正整数)

一、十进制转换为二进制: 方法: 十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来 思路: 进制转换时需要不断得到每次除以二后的余数、逆序排列 循环控制该数不断的除以二/取余 创建一个足够大的数组存放每次得到的余数 循环逆序输出得到的余数; 代码展示: #inc

Busy_luo的博客 2854

MacBook M芯片第二篇:Homebrew安装

Homebrew是MacOS/Linux平台的软件包管理工具,提供便捷的安装、卸载、更新等功能。

码农魏轩 893

C++二进制转十进制

就是通过运用取模和除法运算符,就可以从这个“二进制”整数中,按从右至左的顺序次“剔”出一个二进制”位的数字。我们都知道,在十进制计数体制中,最右数字置值为1,然后向左的数字依次的位置值是10、100、1000等。同理,在二进制计制中,最右数字的位置值为1,然后向左的数字依次的位置值是2、4、8,等等。例如二进制数234可以理解成2*100+3*10+4*1,而与二进制数1101等价的十进是1*1+0*2+1*4+1*8或1+0+4+8,也就是13。方法为:把二进制数按权展开、相加即得十进制数。

weixin_74287172的博客 6009

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++ 四个字节的十六进制数,怎么转换成十进制数

Ansistring sHex="Ox4A2B3C4D"; //4*268435456+10*16777216+2*1048576+11*65536+3*4096+12*256+4*16+13*1 / /=1073741824+167772160+2097152+720896+12288+3072+64+13 //=1244347469 unsigned int i=sHex.ToInt (o ;edtSRVPort->Text = IntTostr(i);

lzksword的专栏 2161

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++中用位运算实现十进制转二进制

C++中用位运算实现十进制转二进制 有一次在牛客网上做北邮考研复试的一道题,题面如下: (声明:本人在查看部分已通过代码和自己提交的代码后得知在牛客网中提交此题只需要做到把一个十进制数转化成二进制数,如果按题目要求来做估计就是错误,若有疑问请在评论区说明) 原题链接:二进制数 第一次写博文,写的不好就原宥一下啦~ 二进制数 大家都知道,数据在计算机里中存储是以二进制的形式存储的。 有一天,小明学了...

qq_43853021的博客 3257

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++算法进制间的转换

16进制转8进制 进制转换方法是什么? 进制转换的方法是:二进制数,十六进制数可以采用按权展开法转化为十进制数,十进制转化为R进制要分为两部分,其中整数部分要除R取余,直到商为0,小数部分要乘R取余直到得到整数。 进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制也就是我们常用的0-9是逢10进一位。接下来将在文章中为大家详细介绍,并在最后,利用C++编写16进制数转换位8进制数,

u013571202的博客 1万+

c++的二进制运算和位运算(二进制原码补码反码)

c++的二进制运算和位运算(二进制原码补码反码)

捉只树袋熊的博客 2413

C++知识点总结(31):位运算、进制转换

位运算和进制转换都是非常热门的题目。在GESP初赛的时候有选择题,其中大规模的就是位运算和进制转换。根据近101010年的调查情况,有接近1010\%10%的题目考察位运算,有接近3030\%30%的题目考察进制转换。

joe_g12345的博客 1479

进制换算&位操作

1、负数转换成十六进制过程(补码),以-3为例: 首先转化为二进制 分为3步: a、首先将负数转换为对应的原码 -3的原码为(也就是+3转换成二进制后的字符串): 0000 0000 0000 0000 0000 0000 0000 0011 (多少组取决于计算机位数,此时为32位,8组) b、再将原码的每一位做取反操作得到反码。 取反操作:0变为1, 1变为0; 取反后的结果即为: 1111 1111 1111 1111 1111 1111 1111 1100 c、将反码+1得到补码 111

weixin_43646126的博客 308

C++ 移位运算与进制转换 浅析

移位运算包括“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。 逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。 算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。 c++中,整数分有符号数和无符号数两种。对于这两种数做左移、右移运算。稍有差别:...

weixin_34128839的博客 195

1179: 数字变位

小明有一个数字x,现在他想把x的各个数字调换位置,得到一个最大的数和一个最小的数,你能帮帮他吗?4.输出最小的数字之前,先处理数字0,数字0和最小的数字交换位置;1.对输入的数x进行数字分离,分离的数字存入一维数组a[i]中;输出两个数,分别表示调换后的最大数和最小数,以空格隔开;(0≤x≤1000000)注:小明不希望数字的最高位是0。3.倒序输出重组后最大的数字;5.输出重组后最大的数字。2.用sort函数排序;

weixin_39936720的博客 579

数字进制转换(C++实现)

十进制数N与其他数进制转换原理就是:N=(N div d)xd+N mod d (其中:div为整除运算,mod 为求余运算) 代码如下: (其中stack库用法详见博文C++ 栈函数stack用法) #include<iostream> #include<stack> #include<stdlib.h> using namespace std; int ...

Clown_pan的博客 1602

【C++】将十进制数转化为二进制,并将每个bit位输出 —— 10

问题:将十进制数转化为二进制,并将32个bit位的每个bit位输出 代码:直接上代码: #include <iostream> using namespace std; int main() { long long int i = 3211264; int j = 0, a[1000], bit[32]; while (i) { a[j] = i % 2; i /= 2; j++; } for (i = j - 1; i >= 0; i--) {

yaodaoji的博客 1444

C++实现数字进制转换器

C++实现数字进制转换器 刷题中遇到一些进制转化的题目,由于从十进制转化为其他进制(十以内)方法完全相同,因此总结为一个进制转换器作为练习,当作一个练习记录。代码没有经过优化,请诸位大佬轻喷。 十进制转其他进制的原理很多博主介绍的非常详细,这里不再赘述了。代码如下 #include <iostream> using namespace std; int main() { int number; //被转化的数字 cout<<"输入要转换的数字 :"; cin

Katalang的博客 1683

C++奇技淫巧(一):取位数,交换,比较,求均值

一、计算一个数转化成二进制后包含1的位数 写法:判断x&(x-1)计算了几次 程序: int func(int x) { int count = 0; while(x){ count++; x = x&(x - 1); } return count; } 牛逼!!! ———————————————— 二、编程风格

leonharddt的博客 1万+
上一篇: 浅谈c++中双向链表的用法
智慧派蒙
博客等级 码龄5年 4粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值