计算机基础二进制补码与移位运算

如题所述

计算机基础二进制补码与移位运算

在计算机系统中,数字,一律采用补码表示和存储。

八位补码,与其代表数字的对应关系,如下表所示。

由图可见,数字与补码的转换,十分简单。

----------------

二进制补码移位:移动一位,就是乘(除)以二。

 向左移位,很简单了。

 向右移位,就要保持最高位不变。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-07-15
最近学习C,感觉C确实比较接近底层,要多了解计算机基础,这一门语言就一定不能错过了,因为许多知识都从这里延伸出来。
言归正题,先说说机器数:

原码/补码/反码之间的关系:

机器数:原码与补码
对于正数而言,二进制数的原码/反码/补码都是一样的
对于负数而言,其二进制数与原码一样,其反码则是其二进制数逐位反转(0转为1,1转为0)而成,其补码则是反码的基础上加1
其中对于原码/反码和补码而言,其最高位中0代表正数,1代表负数

使用补码可使减法变加法(符号位参与运算)

更多的知识可以参考这篇文章:
http://share.onlinesjtu.com/mod/tab/view.PHP?id=173

说到位移运算,就必须有与、或、非、异或这几个运算符,它们二进制运算中的运算符,以下时他们的规则:

就像规则一样,只有全部时1的时候得到的结果才为1。
示例:
(10010011)&(00111101)=(00010001)

当运算结果其中一个为1时,结果就为1,当然,都是1的时候也是1
示例:
(10010011)&(00111101)=(10111111)

当且仅当有一个1的时候才为1,也就是说只有1和0组合才为1
示例:
(10010011)&(00111101)=(10101110)

将二进制逐位取反
示例:
~(10011010) = (01100101)

了解这四个运算符很简单,但是对于初学者而言,更重要的是其用法,如果不知道怎么用,那么这道这些运算符也没什么用

与运算符通常用于掩码,指的是一些设置为开(1)或管(0)的为组合。
在实际运用中,最常见的掩码用法莫过于以下这种:

其中0xff的二进制形式为11111111,当一个数与上0xff,那么此数的最后8位将保存不变(&运算规则决定),而其他数均会为0,也就是说最终的值被改为1个8为字节,这种用法是取位的某一段。

第二种用法是让某些位或某一位为0,因为&运算的规则,只要给某些位上&上为0的数,那么这一位就会为0,如上面的示例(10010011)&(00111101)=(00010001)

使一个位或几个位为1,如x|0x01,这样不管x是什么数,其结果的最后一位都会为1。
把两个数拼起来,如0xFF00 | 0x00FF

想得到全部位为1的数,如~0

移位运算分<<左移和>> 右移。
相似回答