进制转换与位运算的运用
目录
一、位运算
二、数制(进制)介绍
1.数值
三、进制转换
1.各种进制转换成十进制
2.十进制转换为其它进制
3、十进制转化为其它进制
4、二进制、八进制和十六进制的关系
四、计算机中比特bit,字,字节的关系
1.比特bit
2.字节
3.字
五、位运算介绍
1、位运算的分类
2、逻辑位运算
(1)、位与(&)
(2)、位或(|)
(3)、异或(^)
(4)、按位取反
3、移位位运算
4、实例讲解
六、总结
一、位运算
由于所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
二、数制(进制)介绍
1.数值
所谓数制,是指多位数码中每一位的构成方法以及从低位到高位的进位规则。
常见的数制有二进制(B)、八进制(O)、十进制(D)和十六进制(H)。
表1 不同进制数的对照表
十进制(D) | 二进制(B) | 八进制(O) | 十六进制(H) |
0 | 0000 | 00 | 0 |
1 | 0001 | 01 | 1 |
2 | 0010 | 02 | 2 |
3 | 0011 | 03 | 3 |
4 | 0100 | 04 | 4 |
5 | 0101 | 05 | 5 |
6 | 0110 | 06 | 6 |
7 | 0111 | 07 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
注:对于上述进制表格中数值转换应当牢记。
三、进制转换
1.各种进制转换成十进制
规则:“按位加权求和”,其数学表达式为:
例1:
2.十进制转换为其它进制
1、以十进制转换成二进制为例:
(1)整数部分的转换:(规则:除基取余,逆序排序)
例2:
证明:假定十进制整数为,其等值是二进制数为
,则可知:
有上述可知十进制整数每次除于2,都可得到一个余数,即得到二进制整数的每一位,且最后得到的是最高位。
(2)小数部分的转换(规则:乘基取整,顺序排列)
例3:
其证明如上述整数的证明相似。
2、相关代码与结果演示
(1)相关代码
#include<stdio.h>void ToTen()
{ int r,R; //r为输入是数字,R为进制数printf("请输入你要转换的数字: ");scanf("%d:",&r);printf("请输入你要转换的进制数: ");//scanf("请输入你要转换的数字%d: ",&r);scanf("%d",&R);int a=0,i=1;while(r!=0){a=a+(r%10)*i;r=r/10;i=i*R;}printf("输出的十进制数为:%d",a);printf("\n");
}
void TenTo()
{int S,R;printf("请输入一个十进制数: ");scanf("%d",&S);printf("要转换的进制数:");scanf("%d",&R);int a[1000];int i=0;while(S>0){a[i++]=S%R;S=S/R;}for(int j=i-1;j>=0;j--) //逆序输出{printf("%d",a[j]);}printf("\n");
}
void caidan()
{printf("************************************\n");printf("** **\n");printf("** 进制转换 **\n");printf("** 1、任意进制转换为十进制 **\n");printf("** 2、十进制转换为任意进制 **\n");printf("** **\n");printf("************************************\n");
}
int main()
{int n=0;while(1){caidan();printf("请选择你要转换的方式: ");scanf("%d",&n);switch(n){case 1 :ToTen();break;case 2 :TenTo();break;default:printf("你的选择错误!\n");break;}}
}
(2)结果演示
3、十进制转化为其它进制
将十进制换为R进制的方法:整数部分采用基数(R)除法,即除基(R)取余,逆序排列;小数部分采用基数(R)乘法,即乘基(R)取整,顺序排列。
4、二进制、八进制和十六进制的关系
(1)将二进制数从小数点开始分别向右和向左分成三位一组,每组组成一位八进制;若不能正常构成三位一组,则在二进制整数部分高位添零或在小数点低位添零来补足三位一组。反之八进制数按位展成三位二进制数即可。
(2)将二进制数从小数点开始分别向右和向左分成四位一组,每组组成一位十六进制;若不能正常构成四位一组,则在二进制整数部分高位添零或在小数点低位添零来补足四位一组。反之八进制数按位展成四位二进制数即可。
四、计算机中比特bit,字,字节的关系
在用位运算的方法解答问题时,我们必须了解计算机是多少位的系统,防止溢出等问题
1.比特bit
比特bit,即二进制位(Binary digit),一个二进制包含的信息量称为一个比特bit,二进制只有0和1。比特bit是计算机内部数据存储的最小单位。
2.字节
字节Byte是计算机数据处理的最小单位,一个字节有8个比特bit组成,即1字节=8bit。
3.字
字是有若干字节组成,字的位数叫作字长,同时字也是计算机一次处理数据的最大单位。
字和字节的关系:
(1)32位计算机:1字=32位=4字节=32bit
(2)64位计算机:1字=64位=8字节=64bit
五、位运算介绍
1、位运算的分类
位运算分为 逻辑(布尔)位运算符 和 移位位运算符。
逻辑位运算符又分为 位与(&)、位或(|)、异或(^)、按位取反(~);移位位运算符分为 左移(<<) 和 右移(>>)。下面对其进行详细介绍
2、逻辑位运算
(1)、位与(&)
位与(&),c=a&b,按位进行运算,共有四种情况
操作数a | 操作数b | 结果c |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
简记:两者都为1,结果才为1,其余为0。
注:负数按补码形式进行按位与运算。
(2)、位或(|)
位或(|),c=a|b,共有四种情况
操作数a | 操作数b | 结果c |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
简记:有一个为1,结果就为1,两者都是0,才为0
注:负数按补码形式进行按位或运算。
(3)、异或(^)
异或(^),c=a^b,共有四种情况
操作数a | 操作数b | 结果c |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
简记:相同为0,不同为1。
异或的基本性质
性质 | 数学表达式 |
交换律 | a^b=b^a |
结合律 | a^(b^c)=(a^b)^c |
———— | a^0=a;a^a=0 |
自反性 | a^b^b=a^0=a |
(4)、按位取反
对于操作数1010,取反为0101。简记:0变1,1变0.
3、移位位运算
符号 | 含义 | 实例 |
>> | 右移 | a>>b |
<< | 左移 | b<<a |
注:(1)左移,将各二进位全部左移若干位,高位丢弃,低位补0。
(2)右移,将各二进位全部右移若干位,对无符号数,高位补0,
4、实例讲解
(1)、汉明距离(来源:461. 汉明距离 - 力扣(LeetCode) (leetcode-cn.com))
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x
和 y
,计算并返回它们之间的汉明距离。
代码部分
int hanmingDistance(int x,int y)
{int n=x^y;int count=0;while(n){n=n&(n-1);++count;}return count;
}
结果演示:
(2)前n个数字二进制中1的个数(来源:剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 - 力扣(LeetCode) (leetcode-cn.com))
给定一个非负整数 n
,请计算 0
到 n
之间的每个数字的二进制表示中 1 的个数,并输出一个数组。
代码部分:
/*** Note: The returned array must be malloced, assume caller calls free().*/int countOnes(int x) {int count = 0;while (x > 0) {x &= (x - 1);count++;}return count;
}int* countBits(int n, int* returnSize) {int* res = malloc(sizeof(int) * (n + 1));*returnSize = n + 1;for (int i = 0; i <= n; i++) {res[i] = countOnes(i);}return res;
}
结果演示:
六、总结
在运用位运算时,需要时刻注意计算机系统的位数,数据类型大小,同时要对数值有一定是了解,在用位运算解题时,才能提高效率。
进制转换与位运算的运用相关推荐
- 三分钟熟悉进制转换与位运算
微信搜索[NO编程],关注这个不一样的公众号. 个人网站:www.newobject.cc 版权声明:本文为原创文章,转载请注明出处. 进制和位运算简介 进制也叫进位制,是一种记数方法,也称进位计数法 ...
- python中不同进制的整数之间可以直接运算_Python 进制转换、位运算
一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...
- python 整数逆位运算_Python 进制转换、位运算
一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...
- c语言 10进制 按位与,位运算小结(按位与、按位或、按位异或、取反、左移、右移)...
原标题:位运算小结(按位与.按位或.按位异或.取反.左移.右移) 位运算不管是在Java语言,还是在C语言中,或者其他语言,都是经常会用到的,所以本文也就不固定以某种语言来举例子了,原始点就从0.1开 ...
- HTML 传输 字符转换 进制转换 15位 18位 时间戳 转换
<h1>中国</h1> ######################################## HTML字符实体 格式:&#ASCII码十进制数; <h ...
- python 进制转换 递归_python--使用递归优雅实现列表相加和进制转换
咦,好像坚持了一段时间,感觉又有新收获啦. # coding: utf-8 class Stack: def __init__(self): self.items = [] # 是否为空 def is ...
- python十六进制转换成八进制_Python 进制转换 二进制 八进制 十进制 十六进制
全局定义一定不要丢了 全局定义 base = [str(x) for x in range()] + [ chr(x) for x in range(ord('A'),ord('A')+)] 二进制 ...
- python十进制转八进制_python进制转换(二进制、十进制和十六进制)及注意事项...
使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...
- 【Java】进制转换
文章目录 八进制 直接数值赋值 来自字符串的转型 printf()输出八进制 八进制转型String 八进制总结 进制转换 X进制转Y进制 进制与位运算 计算二进制数中1的个数 八进制 直接数值赋值 ...
最新文章
- 聊聊前端国际化文案该如何处理
- tableau暂时不支持m1芯片!期待未来!
- 剑指 Offer 32 . 从上到下打印二叉树
- 目标检测训练trick超级大礼包—不改模型提升精度,值得拥有
- PHP用set_error_handler()拦截程序中的错误
- 【华为云技术分享】Spark中的文件源(上)
- chart控件做实时曲线显示_基于GDI+技术开发工业仪表盘控件
- Linux之ab命令
- 小程序:微信小程序开发
- 传奇服务器修改变量,课程列表-传奇服务端制作修改教程-4.3变量-学传奇
- Java反编译工具JAD安装与基本使用
- Redis入门指南之一(简介)
- jQuery版本低引起的漏洞——CVE-2020-11022/CVE-2020-11023
- The Oregon Trail 俄勒冈之旅
- Ghost XP打XP SP3后出现登录不了的问题
- 今天写好汇报材料,明天升职加薪~
- catgroup linux_linux中/etc/group文件详解
- Web服务器(01)——介绍web服务器
- [转]Facebook 如何管理150亿张照片
- c++编程题2——ISBN计算识别码
热门文章
- 5G时代来临,前端开发工程师必须了解的音视频入门基础知识
- 刷脸已经逐步在多个领域落地开花
- 2021-07-16(Kotlin学习笔记 -->享学课堂vip课程)
- mysql数据库安装:windows下安装MSI版
- 成纤维细胞生长因子家族介绍:(PEG-FGF/rb-bFGF/aFGF/rhaFGF/baFGF/rhKGF-2)
- 数据预处理 常见的几种方法
- 机器人测钢卷直径_如何引导机器人对钢卷定位焊接?秘密就在这里
- 为什么https比http更安全?_货车拉钢卷为什么都是立式运输,平放不是更安全吗?...
- 微信小程序------1️⃣
- Spark商业实战三部曲源码地址