【转载】原码、反码和补码;位运算

文章介绍了计算机中正数和负数的原码、反码和补码表示方法,重点强调了补码在存储和运算中的重要性。补码使得零的编码统一,简化了符号位处理,并将减法转换为加法运算。此外,还概述了C语言中的位操作符,如按位与(&),按位或(|),按位异或(^),左移(<<)和右移(>>),以及按位取反(~)的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原码、反码和补码

C语言中文网上一篇讲解原码、反码和补码的文章。原码、反码、补码及位操作符,C语言位操作详解

 在计算机系统中,统一用补码来存储。


  • 位(bit)是计算机中处理(传输)数据的最小单位,其取值只能是 0 或 1。
  • 字节(Byte)是计算机处理数据的基本单位,通常系统中一个字节为 8 位。即:1 Byte=8 bit。

bit是计算机最小传输数据的单位。

Byte是计算机最小存储单位。

为便于演示,本节表示的原码、反码及补码均默认为 8 位。
准确地说,数据在计算机中是以其补码形式存储和运算的。在介绍补码之前,先了解原码和反码的概念。

正数的原码、反码、补码均相同。

原码:用最高位表示符号位,其余位表示数值位的编码称为原码。其中,正数的符号位为 0,负数的符号位为 1。
负数的反码:把原码的符号位保持不变数值位逐位取反,即可得原码的反码。
负数的补码:在反码的基础上加 1 即得该原码的补码。

例如:
+11 的原码为: 0000 1011
+11 的反码为: 0000 1011
+11 的补码为: 0000 1011

-7 的原码为:1000 0111
-7 的反码为:1111 1000
-7 的补码为:1111 1001

注意,对补码再求一次补码操作就可得该补码对应的原码。



位操作符

C语言运算符
运算符功 能运算规则
&按位与对应位均为 1 时,结果才为 1
|按位或两位中只要有一位为 1,结果为 1。
只有两位同时为 0 时,结果为才为 0。
^按位异或两位相异时,结果为 1;两位相同时,结果为 0。
<<左移将运算数的各二进制位均左移若干位,高位丢弃(不包括 1),低位补 0,每左移一位,相当于该数乘以 2
>>右移将运算数的各二进制位均右移若干位,正数补左补 0,负数左补 1,右边移出的位丢弃。
~按位取反0 变 1,1 变 0。

注意,计算机中位运算操作,均是以二进制补码形式进行的。


在计算机系统中,数值一律用补码来存储:主要原因是:

  • 统一了零的编码
  • 将符号位和其它位统一处理
  • 将减法运算转变为加法运算
  • 两个用补码表示数相加时,最高位富豪位如果有进位,则被舍弃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值