数制与运算

2023-12-23 23:38
文章标签 运算 数制

本文主要是介绍数制与运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言:计算机的基本功能是对数据进行存储、处理(运算)、输出,这些数据主要有数值、字符、图形、图像、声音等。在计算机系统中,这些数据都要被转化成二进制(0或1)的形式存储,也就是需要进行二进制编码处理。

1、什么是编码?

编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。与之相对应的是解码,解码是一种用特定方法,把数码还原成它所代表的内容或将电脉冲信号、光信号、无线电波等转换成它所代表的信息、数据等的过程。(百度百科)

其实编码通常来说就是用数字、字母等按规定的方法和位数来代表特定的信息,解码就是将人们熟悉的信息通过特定的规则和位数转化为计算机能识别的数据,两者主要是为了人和计算机之间进行信息交流和处理。

 

2、计算机为什么用二进制编码?

  • 物理上容易实现,可靠性强。电子元器件大都具有两种稳定的状态:电压的高和低,晶体管的导通和截止,电容的充电和放电等。这两种状态刚好可以利用二进制的两个数码0和1来表示。
  • 运算简单,通用性强。如二进制的乘法运算规则有三种:1x0=0x1=0;0x0=0;1x1=1。如果用十进制的运算规则则有55种。
  • 计算机中的二进制数的0、1数码与逻辑量“假”与“真”的0和1吻合,便于表示和进行逻辑运算。

计算机除了使用二进制数(Binary)外,为了书写和表示方便,还引入八进制数(Octal)和十六进制数(Hexadecimal),而人们在生活中通常使用十进制数(Deciaml),之所以使用十进制数是因为人有十个手指头,当然有人会问为什么不把脚指头算上,当然肯定是有人算上了的,比如神秘的玛雅人就是采用二十进制。

 

3、不同计数制之间的相互转换

  • 二进制数(Binary)、八进制数(Octal)、十六进制数(Hexadecimal)转化为人们熟知的十进制数(Deciaml)

(110101.01)B = 1x2^5 + 1x2^4 + 1x2^2 + 1x2^0 + 1x2^-2 = (53.25)D

(456.4)O = 4x8^2 +5x8^1 + 6x8^0 +4x8^-1 = (302.5)D

(A11)H = 10x16^2 + 1x16^1 + 1x16^0 = (2577)D

  •  十进制数(Deciaml)转化为二进制数(Binary)、八进制数(Octal)、十六进制数(Hexadecimal)

将十进制数转换为X进制数时,可以将次数分成整数和小数两部分分别转换,然后拼接即可。

整数部分:采用除以X取余法,将十进制数不断除以X取余数,直到商为0,然后反向排列余数;

小数部分:采用除以x取整,将十进制小数部分不断除以x取整数,直到小数部分为0或达到所求的精度为止(小数部分可能永远不会的到0),然后正向排列得到转换后的小数部分。

  • 二进制数(Binary)、八进制数(Octal)、十六进制数(Hexadecimal)之间的相互转换

一位八进制数相当于3位二进制数,一位十六进制数相当于4位二进制数,所以转换方法比较简单。

二进制数转换为八进制数时,以对应二进制数小数点为中心向左右两边分组,每3位为一组,不足补0即可。

同样道理,二进制数转换为十六进制数时,以对应二进制数小数点为中心向左右两边分组,每4位为一组,不足补0即可。

将二进制数1101101110.110101 转换为八进制数

(001 101 101 110.110 101)B = (1556.65)O

将二进制数1101101110.110101 转换为十六进制数

(0011 0110 1110.1101 0100)B = (36E.D4)H

将八进制数转换为二进制数时,只需要将该八进制数1位数转化为3位就行

(1556.65)O = (001 101 101 110.110 101)B

将十六进制数转换为二进制数时,只需要将该十六进制数1位数转化为4位就行

(36E.D4)H = (0011 0110 1110.1101 0100)B

 

4、二进制数的算术运算

  • 加法

0 + 0 = 0

0 + 1 = 1 + 0 = 1

1 + 1 = 0 (被加数和加数为1,结果本位为1,按逢二进一向高位进1)

 

被加数        1   1   0   1                  13

加数            1   1   1   0                  14

进位 +)   1   1   0   0

结果       1   1   0   1   1                  27

 

  • 减法

0 - 0 = 1 - 1 =0

1 - 0 = 1

0 - 1 = 1(被减数为0,减数为1,结果本位为1,向高位借位)

 

被减数        1   1   0   1   1                             27

减数                 1   1   1   0                             14

借位 -)         1   1   0   0

结果            0   1   1   0   1                             13

 

  • 乘法

0 x 0 = 0

0 x 1 = 1 x 0 = 0

1 x 1 = 1

 

被乘数                           1   1   0   1                             13

乘数 x)                           1   0   1   0                             10

部分积                            0   0   0   0

                                  1   1   0   1

                             0   0   0   0

                        1   1   0   1

乘积            1   0   0   0   0   0   1   0                             130

 

  • 除法

0 / 0(无意义)

0 / 1 = 0

1 / 0(无意义)

1 /  1= 1

 

5、二进制数的逻辑运算

A

B

A^B

A | B

~A

~B

0

0

0

0

1

1

0

1

0

1

1

0

1

0

0

1

0

1

1

1

1

1

0

0

 

欢迎搜索个人微信公众号“宅男一号”加入宅基地,给你带来更多IT内容分享!

这篇关于数制与运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529863

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

快速幂运算的一些模板

这里用递归和循环两种做法来做。 简单来说,快速幂就是把底数扩大,指数缩小,比如2*2=4;计算2的幂时,就可以转换成4的幂来运算,这样可以避免在计算大的数据时爆int的现象  //递归int power(int a,int n){int ans;if(n==2) ans=1;else{ans=power(a*a,n/2);if(n%2==1) ans*=a;}return ans;}

高精度计算----减法运算(浮点型)

基于上一贴,修改减法运算适合于高精度浮点型计算。 因为减法比加法难度大一点,考虑的地方也要多一些,可能代码有欠缺,欢迎指出。 运算说明: 1、相减函数依旧没改变,包括上一贴的判断被减数与减数的大小函数也没变。 2、增加两个函数,取小数位数函数和结果处理(回归小数点)函数 3、与加法浮点高精度运算相比,这里改变较多的是结果处理函数,加法加完后,位数不减反增,而且最多增一位。减法会消失掉好多

高精度计算----减法运算

处理大数减法运算: 1、首先要判断被减数与减数哪个更大,再相应的带入减法函数去处理。具体的比较可以使用字符串的相关知识去比较。 2、相减要先对齐数组,依照减数的长度,执行相应的减法运算次数。 3、不需要借位相减的话,直接减去;需要的话,向前借一位,若前一位是0,则再前借(此时前一位的0变为10)。 测试程序效果如下:   以下代码包括相减函数,比较被减数减数函数,若有错误,请指出:

Python中的位运算-从入门到精通

你是否曾经好奇过计算机是如何在底层处理数据的?或者,你是否想知道为什么有些程序员总是津津乐道于位运算的强大?如果是,那么你来对地方了!今天,我们将深入探讨Python中的位运算,揭示它们的神奇之处,以及如何利用它们来优化你的代码。 目录 位运算:计算机的秘密语言为什么位运算重要? Python中的位运算操作符1. 按位与 (&)2. 按位或 (|)3. 按位异或 (^)4. 按位取反 (~

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. # 图片加法imp

c语言(基本运算)

算术运算符的基本使用: #include <stdio.h>int main(){int a = 10 + 1 + 2 - 3 + 5;printf("10 + 1 + 2 - 3 + 5 = %d\n", a); //10 + 1 + 2 - 3 + 5 = 15int b = -10;printf("b = %d\n", b); //b = -10int c = 10 * b;prin