原码、反码、补码

一、位运算符

(一)真值表

位运算符作用于位,并逐位执行操作。“与” “&”、“或” “|” 和 “异或” “^" 的真值表如下所示:

pqp&qp|qp^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

(二)例子

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101

A&B = 0000 1100
A | B = 0011 1101
A^B = 0011 0001
~A = 1100 0011

(三)位运算符

运算符描述
& 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。
| 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。
^ 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。
~ 具有"翻转"位效果,即0变成1,1变成0。
<< 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。
>> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。

二、码

(一)原码

将一个整数转换成二进制形式,就是其原码。例如short a = 6; a 的原码就是0000 0000 0000 0110;更改 a 的值a = -18; 此时 a 的原码就是1000 0000 0001 0010

通俗的理解,原码就是一个整数本来的二进制形式。

(二)反码

对于正数,它的反码就是其原码(原码和反码相同);

负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。例如short a = 6; a 的原码和反码都是0000 0000 0000 0110;更改 a 的值a = -18; 此时 a 的反码是1111 1111 1110 1101

(三)补码

对于正数,它的补码就是其原码(原码、反码、补码都相同);

负数的补码是其反码加 1。例如short a = 6; a 的原码、反码、补码都是0000 0000 0000 0110;更改 a 的值a = -18; 此时 a 的补码是1111 1111 1110 1110

 

可以认为,补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫“补码”。

原码、反码、补码的概念只对负数有实际意义,对于正数,原码、反码、补码都是一样的。

在计算机内存中,整数一律采用补码的形式来存储。

posted @ 2023-02-21 22:09  ImreW  阅读(116)  评论(0编辑  收藏  举报