如果计算机字长为8位,则
想一想:如果计算机直接用机器数进行计算,(+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。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/4121.html
用户评论
这篇文章真是太棒了!终于彻底理解了原码、补码和反码以及位运算之间的关系!
有7位网友表示赞同!
终于找到一篇讲得这么清楚的原码、补码、反码文章了,太感谢了!
有20位网友表示赞同!
原来补码和反码还有这种关系,之前一直搞不清楚,现在终于明白了!
有5位网友表示赞同!
位运算,原来可以这么灵活运用,文章讲解太详细了!
有11位网友表示赞同!
感觉收获很大,以前对这些概念一直很模糊,现在终于清晰了!
有20位网友表示赞同!
作者讲得通俗易懂,特别是对于位运算的讲解,让我茅塞顿开!
有5位网友表示赞同!
以前一直觉得原码、补码、反码很复杂,现在发现其实很简单,感谢作者!
有6位网友表示赞同!
文章内容详细,讲解清晰,非常适合初学者学习!
有12位网友表示赞同!
终于搞懂了负数在计算机中的表示方法,太感谢了!
有7位网友表示赞同!
文章结构清晰,逻辑严谨,学习效率很高!
有5位网友表示赞同!
对原码、补码和反码的讲解非常透彻,强烈推荐!
有14位网友表示赞同!
终于找到一篇靠谱的原码、补码、反码文章了!
有17位网友表示赞同!
文章内容丰富,对位运算的讲解非常实用!
有19位网友表示赞同!
这篇文章让我对计算机底层知识有了更深的理解!
有18位网友表示赞同!
以后再也不用担心原码、补码、反码和位运算了!
有13位网友表示赞同!
非常感谢作者分享这么优秀的文章!
有7位网友表示赞同!
学习了,学到了很多新知识!
有20位网友表示赞同!
点赞!文章内容非常棒!
有14位网友表示赞同!
收藏了,以后再学习!
有20位网友表示赞同!
太实用了,强烈推荐!
有13位网友表示赞同!