1.进制转换

1.1整数进制转换

例:10进制转16进制 (114514)10=(BF52)16
方法:除16取余法

1.2整数进制转换例题


方法1:

#include <stdio.h>
#include <ctype.h>
int main () {int n, m, i, sum = 0, time = 1;//sum是用来存放转换成十进制后的数char a[30];//输入的数组int b[30];//存放每一位转换成数是多少的数组int c[30];//转换成m进制后存放的数组scanf("%d%s\n%d", &n, a, &m);for(i = 0; a[i]; i ++ )//上面的链接解释了为什么要这样遍历数组if(a[i]>='0'&&a[i]<='9')//isdigit是判断是不是字符型数组的函数sum =sum*n + a[i] - '0';//转换成数else//是字母sum =sum*n + (a[i] - 'A') + 10;//转换成数,记得 + 10int len2 = 0;//转换成m进制时用来表示下一位放在哪里的指针while(sum >= 1) {//只要还没除完c[len2] = sum % m;sum /= m;len2 ++ ;}for(int i = len2 - 1; i >= 0; i -- )//倒着输出if(c[i] < 10) printf("%d", c[i]);//是数字else printf("%c", c[i] - 10 + 'A');//是字母return 0;
}

方法2

#include<bits/stdc++.h>using namespace std;
//'0'=48 '1'=49 'A'=65
int char_to_int(char a){    //把字符转换为整数 return '0'<=a && a<='9'?a-'0':10+a-'A';
}char int_to_char(int a){   //把整数转为要输出的数 return a<=9 ?'0'+a:a-10+'A';    //将ascii对应的整数转为字符型 //所以'0'+a=48+a 然后转化为字符
} int main(){int output[33];int n,m,dec=0,num=0;//dec十进制数 string input;cin>>n>>input>>m;//把输入的数转化为十进制数 for(int i=0;i<input.length();i++){dec=dec*n+char_to_int(input[i]);} //转化为m进制数while(dec!=0){output[num++]=dec%m;dec/=m;} //输出转化好的进制数 for(int i=num-1;i>=0;i--){cout<<int_to_char(output[i]);  }cout<<endl;return 0;
}

1.3十进制负数转二进制

第一步:求反码。第二步:求补码(也就是二进制数)
例:-20 不看负号转2进制 10100 因为有负号,则第一位为1,且要补满8位
所以原码:10010100
然后反码:除第一位取反)11101011
补码(反码基础+1;11101100

1.4十进制小数转二进制

将小数位置*2,再取整数。
3.14)10=(11.00100011)2

1.5 十进制数转化为负r进制数

其实跟正进制差不多,但余数可能会小于0,则需要多一个判断条件,将负余数转为正数,也就是-r
还有商也要+1

 while(input!=0){// -5%-2 = -2* 2 - 1// 转为负余数 -2*3 + 1//所以商也要加 1 int k=input%r;   int c=input/r;if(k<0){k=k-r;c++;}input=c;output[num++]=k;   }

2.位运算

c++中的位运算,也就是将整数在内存中的二进制位进行按位操作,换句话说也就是进行位运算时,整数会直接用二进制数表示

2.1 按位与 &

同真为真,其余为假。

2.2 按位或 |

一真为真,全假为假。

2.3 按位异或 ^

一真一假为真,同真同假为假。
性质:a^b ^a=b(可以用来找奇数个的数值)

2.4 取反 ~

2.5位左移 <<

例:00101<<2相当于10100 ,也就是00101*2^2

2.6位右移>>

就是数/(2^n)

3.练习

3.1高低位交换(位运算)


注意:输入的数为整数,所以要用 unsigned int

#include<bits/stdc++.h>using namespace std;int main(){unsigned int n;   //cin>>n;cout<<(n<<16)+(n>>16)<<endl;return 0;
}

3.2进制转换(负进制)


思路:跟正进制差不多,只有一个要注意的地方:余数可能为负数。

#include<bits/stdc++.h>using namespace std;char int_to_char(int a){   //把整数转为要输出的数 return a<=9 ?'0'+a:a-10+'A';
}
int main(){int output[105];int input;int r,num=0;cin>>input>>r;cout<<input<<"=";while(input!=0){// -5%-2 = -2* 2 - 1// 转为负余数 -2*3 + 1//所以商也要加 1 int k=input%r;   int c=input/r;if(k<0){k=k-r;c++;}input=c;output[num++]=k;   }for(int i=num-1;i>=0;i--){cout<<int_to_char(output[i]);}cout<<"(base"<<r<<")"<<endl;
}

P1469 找筷子(位运算)异或的性质


思路:a^ b^a=b

#include<bits/stdc++.h>using namespace std;
int main(){int n,x,ans=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&x);ans=ans^x;}printf("%d\n",ans);
}

19章 位运算与进制转换相关推荐

  1. 位运算和进制转换,反码补码

    进制转换 package junit;public class Test {public static void main(String[] args) { // int a=Integer.MIN_ ...

  2. python 整数逆位运算_Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  3. python中不同进制的整数之间可以直接运算_Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  4. 一篇文章解决计算机基础——进制转换难题

    很多同学在学习计算机基础时对进制转换有一定的疑惑,本篇博文对此配合例题做出详尽的讲解,希望能够对大家在学习进制转换时有所帮助.由于博主水平有限,如果文中存在描述不当之处,恳请批评指正. 1.十进制转R ...

  5. 数据的表示和运算,进制转换,BCD码,奇偶校验码,海明校验码,循环冗余码

    进制转换,逢r进一 基数:每个数码位所用到的不同符号的个数,r进制的基数为r 二进制 0 1 B 八进制 0~7 O 十进制 0~ 9 D 十六进制 0~9 ,A ~F( 10 ~15) H或0x 二 ...

  6. JAVA-初步认识-第五章-数组-常见操作-进制转换(查表法)

    一. 数组的常见应用 数组在开发中什么时候用? 举例说明: 需求:获取一个整数的十六进制表现形式(要明白十六进制的表现形式是什么样子,有数字有字母) 本来应该返回一个字符串,但是还没有学到返回字符串, ...

  7. python十进制转八进制_python进制转换(二进制、十进制和十六进制)及注意事项...

    使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...

  8. python 进制转换 递归_python--使用递归优雅实现列表相加和进制转换

    咦,好像坚持了一段时间,感觉又有新收获啦. # coding: utf-8 class Stack: def __init__(self): self.items = [] # 是否为空 def is ...

  9. python十六进制转换成八进制_Python 进制转换 二进制 八进制 十进制 十六进制

    全局定义一定不要丢了 全局定义 base = [str(x) for x in range()] + [ chr(x) for x in range(ord('A'),ord('A')+)] 二进制 ...

最新文章

  1. FragmentManager中Fragment的重复创建、复用问题
  2. 用CMake构建工程时 cmake -G“Unix Makefiles“ 的使用
  3. com.android.tools.build:gradle:2.0.0-alpha3 build errors
  4. python res_Python models.resnet152方法代码示例
  5. Form表单的主要Content-Type
  6. Java EE CDI依赖注入(@Inject)教程
  7. e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 1e3
  8. java学习(83):常用基础类object
  9. linux下重新启动oracle
  10. Spring学习笔记之AOP配置篇(一) 注解配置
  11. 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
  12. Memcahce和Redis比较
  13. vue和echarts实现地图航线
  14. kali 克隆网页_如何克隆一个网站(by Kali)
  15. 主机甲和乙已建立了 TCP 连接,甲始终以 MSS=1KB 大小的段发送数据,并一直有数据 发送;乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超 时时拥塞窗口为
  16. Java基础篇---练习:类的设计
  17. mysql 1114错误_mysql – ERROR 1114(HY000):表’XXX’已满
  18. 分布式系统设计模式 - 预写日志(Write Ahead Log)
  19. excel任意单元格中自动插入页码和总页数
  20. 有没有测试牙齿需不需要修正的软件,三步图测法,就能知道自己牙齿是否需要矫正...

热门文章

  1. 【渝粤教育】电大中专就业指导 (6)作业 题库
  2. opencv 表格识别之表格透视矫正(二)
  3. 迷你版webpack
  4. [附源码]计算机毕业设计Python甜品购物网站(程序+源码+LW文档)
  5. python将数值代入方程_使用 Python 解数学方程
  6. c语言圆弧插补源代码,模拟PLC 的圆弧插补方式在VC中绘制圆弧
  7. 只用300小时,17岁高中生解开困扰数学家27年难题,因张益唐「入坑」数论
  8. 多线程断点续传后台下载
  9. 尚硅谷vue学习p52
  10. 基于D435i的点云重建