一篇文章详细讲解了原码、补码、补码和位运算

机器数与真值一个数在计算机中的二进制表示形式, 被称为这个数的机器数。将带符号位的机器数对应的真正数值称为机器数的真值。为区分正负数,机器数的最高位被用来存储符

大家好,如果您还对一篇文章详细讲解了原码、补码、补码和位运算不太了解,没有关系,今天就由本站为大家分享一篇文章详细讲解了原码、补码、补码和位运算的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

想一想:如果计算机直接用机器数进行计算,(+1)+(-1)等于什么?

原码

原码是该值的机器号,即最高位是该值的符号位,其余位代表该值。这是人脑最容易理解和计算的表示形式。

[+1]=[00000001]原始

[-1]=[10000001]原始

想一想:考虑到符号,一个8位二进制数的取值范围是多少?

[-127,127]

反码

补码表示为:正数的补码是其本身,负数的补码以其原码为基础。符号位保持不变,其余位反转。

[+1]=[00000001]原值=[00000001]逆值

[-1]=[10000001]原始=[11111110]逆

补码

补码表示方法为:正数的补码是其自身,负数的补码是在其补码的基础上+1。

[+1]=[00000001] 原值=[00000001] 逆值=[00000001] 补码

[-1]=[10000001] 原=[11111110] 逆=[11111111] 补

特别:00000000 代表0的原码、反码、补码

10000000 代表原码-128

那么-128的补码是11111111

-128的补码也是10000000

想一想:使用补码算术,(+2) + (-2) 等于什么?

2-2=2 + (-2)

=0000 0010(原始) + 1000 0010(原始)

=0000 0010(反向) + 1111 1101(反向)

=0000 0010(补码) + 1111 1110(补码)

=1 0000 0000 (补码) — 从最高位开始产生进位,并丢弃进位

=0000 0000(补码)

=0000 0000(相反)

=0000 0000(原始)

=0

在计算机中,所有数字都以二进制补码形式存在。补码可以简化运算,变减法为加法。

总结:

正数:原码=补码=补码

练习1

1. 求+119 ______ ______ ______的原码、反码和补码。

2. 求-56 ______ ______ ______的原码、反码和补码。

3. (2017 NOIP) 在8位二进制补码中,10101011表示的数字是十进制(B)。

A.43 B.-85 C.-43 D.-84

什么是位运算?

在现代计算机中,数据以二进制形式存储。对于计算机中的每一位,可以存储0和1两种状态。计算机对每一位进行的运算都是“位运算”,即符号位一起参与运算。

位逻辑运算符:

位移位运算符:

位逻辑运算符

一篇文章详细讲解了原码、补码、补码和位运算

位逻辑运算是将每个二进制位作为布尔值进行布尔运算,以逻辑中的真与假(1和0)为操作单位,运算结果也是真或假(1或0) 0)。

需要注意的是,位运算是针对二进制运算,计算机中的数字以补码形式存在。因此,在手动进行位运算计算时,需要将数字转换为二进制补码表示形式,右对齐,然后对位进行位运算。

例如3 5,先以补码形式写入0000 0011和0000 0101,然后进行右对齐操作。

按位与

运算规则:当两位都为1 时,结果为1。

运算方法:将数转换为补数,然后对位进行与运算,然后将结果转换为原码(或原码对应的十进制数)

练习2

1. 表达式0x130x17 的值为______;

2、若x=-2,y=3,则xy的结果为______;

3. 如果x=-2,y=-3,则xy 的结果是______。

按位或 |

运算规则:只要两位中有一个1,结果就是1。

运算方法:将数转换为补数,然后对位进行或运算,然后将结果转换为原码(或原码对应的十进制数)

练习3

1. 表达式0x13的值|0x17 是_______;

2. 如果x=-2,y=3,则x | 的结果y 是_______;

3. 如果x=-2,y=-3,则x | 的结果y 是_______。

按位异或 ^

运算规则:两位不同则为1,相同则为0。

运算方法:将数转换为补数,然后对位进行异或运算,然后将结果转换为原码(或原码对应的十进制数)

练习 4

1. 表达式0x13 ^0x17 的值为_______;

2、若x=-2,y=3,则x^y的结果为________;

3. 如果x=-2,y=-3,则x^y的结果是________。

按位取反 ~

运算规则:0变1,1变0。

运算方法:将数转换为补码,然后将位取反,然后将结果转换为原码(或原码对应的十进制数)

练习 5

1. 表达式~0x17 的值是多少?

2. 表达式~ -3 的值是多少?

位移运算符

位移位运算是将运算对象的所有数字向左(或右)移动一定的位数。

左移():左移X位,值变为原值的2^X倍

右移():右移X位,将值的大小缩小为原值的2^X倍

左移

运算规则:左移X位,值大小扩大2^X倍。

操作方法:不考虑溢出,将除法符号位中的整个数左移,低位(右边空位)补0

快速运算:即直接乘以2^X

右移

运算规则:右移X位,值大小减少2^X倍

操作方法:在不考虑溢出的情况下,将数字转换为补码,将所有数字整体右移,并对高位中的符号位(左边的空位)进行补码

快速运算:直接除以2^X并向下舍入。请注意,负数向下舍入,例如:35.0/4=-9。

用户评论

一篇文章详细讲解了原码、补码、补码和位运算
全网暗恋者

这个讲解真棒!我一直在迷茫这些概念,终于明白了! 原码、反码和补码都是很重要的概念,特别是位运算,感觉这篇文章把它们解释得非常清楚易懂。

    有8位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
嗯咯

reszcie kumam jak dziala to wszystko!

    有17位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
病态的妖孽

讲的太棒了!之前真的对原码、反码、补码一头雾水, 现在终于理解了它们的含义和用途。位运算更是让我眼前一亮,要好好研究一下这种高效的操作方式。

    有16位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
莫失莫忘

感觉还蛮累赘的,不如直接上手代码练习更有效率啊。不过这篇文章确实提供了比较全面的理论基础,算是打下了知识储备吧。

    有15位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
凉凉凉”凉但是人心

我以前只知道补码在计算机里使用,没想到它还有其他形式呢!这个解释帮我开阔了眼界,原来计算机制如此复杂,真是让人敬佩!

    有7位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
看我发功喷飞你

其实很多例子都过于简单化了,对于一些更复杂的操作场景,这篇文章好像没做太多解释。希望作者能够补充一些复杂的应用实例。

    有8位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
水波映月

终于找到一篇讲清楚原码、反码、补码的文章啦!之前网上看到的都是些乱七八糟的,弄得我更加不明白。感谢作者!

    有6位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
一笑傾城゛

说的太复杂了一点,我这种学计算机刚入门的人感觉很难理解。希望能用更通俗易懂的语言讲解一下原理。

    有16位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
早不爱了

位运算真的很强大,应用场景很多!希望以后有机会深入学习它,提高编程效率

    有11位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
呆檬

对于想要深入了解计算机原理的人来说,这篇文章是个很好的开篇!原码、反码的定义和举例都很有帮助,补码是如何转化的也解释得很清楚,值得细读

    有14位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
夏日倾情

我感觉这个文章缺少一些实际应用场景,比如在嵌入式系统或网络编程中,原码、反码等概念是怎么运用的?

    有9位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
熟悉看不清

很棒的文章!对提高我对计算机底层原理的理解很有帮助。以后在写汇编代码时,这些知识就会显得尤为重要了

    有14位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
艺菲

希望能看到更多关于位运算实例和应用的讲解,比如常见的操作指令、它们背后的逻辑等等。

    有15位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
大王派我来巡山!

这个文章写的真详细! 原码、反码、补码都解释得很清楚。我之前一直以为它们只是简单的概念而已,没想到背后还有这么多的数学原理在支撑着!

    有8位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
不忘初心

感觉有些知识点连接不够紧密,比如反码和补码之间的关系不太清晰。 希望能提供更直观的例子进行说明。

    有13位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
烟雨萌萌

学习了这段代码后,我对原码、反码、补码的理解又更加深刻了! 原来它们的作用不仅仅局限于数字转换,还有广泛应用在计算逻辑当中!

    有12位网友表示赞同!

一篇文章详细讲解了原码、补码、补码和位运算
逾期不候

很感谢作者分享如此宝贵的信息!这篇文章不仅帮我在理论层面加深了我对原码、反码、补码的了解,还让我明白了如何利用位运算提高代码效率。

    有19位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/99565.html

(0)
小su的头像小su
上一篇 2024年8月29日 下午10:57
下一篇 2024年8月29日 下午11:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注