目录

一、位运算

二、数制(进制)介绍

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;
}

结果演示:

六、总结

在运用位运算时,需要时刻注意计算机系统的位数,数据类型大小,同时要对数值有一定是了解,在用位运算解题时,才能提高效率。

进制转换与位运算的运用相关推荐

  1. 三分钟熟悉进制转换与位运算

    微信搜索[NO编程],关注这个不一样的公众号. 个人网站:www.newobject.cc 版权声明:本文为原创文章,转载请注明出处. 进制和位运算简介 进制也叫进位制,是一种记数方法,也称进位计数法 ...

  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. c语言 10进制 按位与,位运算小结(按位与、按位或、按位异或、取反、左移、右移)...

    原标题:位运算小结(按位与.按位或.按位异或.取反.左移.右移) 位运算不管是在Java语言,还是在C语言中,或者其他语言,都是经常会用到的,所以本文也就不固定以某种语言来举例子了,原始点就从0.1开 ...

  5. HTML 传输 字符转换 进制转换 15位 18位 时间戳 转换

    <h1>中国</h1> ######################################## HTML字符实体 格式:&#ASCII码十进制数; <h ...

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

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

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

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

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

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

  9. 【Java】进制转换

    文章目录 八进制 直接数值赋值 来自字符串的转型 printf()输出八进制 八进制转型String 八进制总结 进制转换 X进制转Y进制 进制与位运算 计算二进制数中1的个数 八进制 直接数值赋值 ...

最新文章

  1. 聊聊前端国际化文案该如何处理
  2. tableau暂时不支持m1芯片!期待未来!
  3. 剑指 Offer 32 . 从上到下打印二叉树
  4. 目标检测训练trick超级大礼包—不改模型提升精度,值得拥有
  5. PHP用set_error_handler()拦截程序中的错误
  6. 【华为云技术分享】Spark中的文件源(上)
  7. chart控件做实时曲线显示_基于GDI+技术开发工业仪表盘控件
  8. Linux之ab命令
  9. 小程序:微信小程序开发
  10. 传奇服务器修改变量,课程列表-传奇服务端制作修改教程-4.3变量-学传奇
  11. Java反编译工具JAD安装与基本使用
  12. Redis入门指南之一(简介)
  13. jQuery版本低引起的漏洞——CVE-2020-11022/CVE-2020-11023
  14. The Oregon Trail 俄勒冈之旅
  15. Ghost XP打XP SP3后出现登录不了的问题
  16. 今天写好汇报材料,明天升职加薪~
  17. catgroup linux_linux中/etc/group文件详解
  18. Web服务器(01)——介绍web服务器
  19. [转]Facebook 如何管理150亿张照片
  20. c++编程题2——ISBN计算识别码

热门文章

  1. 5G时代来临,前端开发工程师必须了解的音视频入门基础知识
  2. 刷脸已经逐步在多个领域落地开花
  3. 2021-07-16(Kotlin学习笔记 -->享学课堂vip课程)
  4. mysql数据库安装:windows下安装MSI版
  5. 成纤维细胞生长因子家族介绍:(PEG-FGF/rb-bFGF/aFGF/rhaFGF/baFGF/rhKGF-2)
  6. 数据预处理 常见的几种方法
  7. 机器人测钢卷直径_如何引导机器人对钢卷定位焊接?秘密就在这里
  8. 为什么https比http更安全?_货车拉钢卷为什么都是立式运输,平放不是更安全吗?...
  9. 微信小程序------1️⃣
  10. Spark商业实战三部曲源码地址