补码的运算

在计算机系统中,数据的表示与存储都是以0或1的形式,而表示这些0或1,我们可以将外部数据通过数字电路进行编码,对于有符号数,在计算机系统中有三种编码,即我们通常所了解的编码:原码,反码,补码,而无符号数没有原码,反码,补码之分,况且,我觉得在计算机存储系统领域讨论无符号数是没什么意义的

原码:

正数原码 = 0 + 正数绝对值

负数原码 = 1 + 负数绝对值

例如:

+20的原码:00010100

- 20的原码:10010100

反码:

正数反码 = 正数原码

负数反码 = 负数原码符号位的1不变,绝对值部分按位取反

例如:

+20的原码:00010100

+20的反码:00010100

- 20的原码:10010100

- 20的反码:11101011

补码:

正数补码 = 正数反码 = 正数原码

负数补码 = 负数反码符号位的1不变,绝对值部分+1

例如:

+20原码:00010100

+20反码:00010100

+20补码:00010100

- 20原码:10010100

- 20反码:11101011

- 20补码:11101110

总结:

求解有符号数[正数与负数]的补码的方法:

对于正数:

补码 = 反码 = 原码

对于负数:

1.补码 = 原码 -----[原码符号位不变,其余位按位取反]-----> 反码 -----[反码符号位不变,末位+1]-----> 补码

2.补码 = 负数的绝对值的原码 -----[按位取反,末位+1]-----> 补码

补码的运算原理:

在计算机系统中,CPU仅仅只有加法电路,没有减法电路,采用补码运算的目的,是将减法运算变为加法运算,同时,补码的运算是将符号位也视为数据共同参与数据的运算,其运算结果依然是补码

补码的性质:

1.原码与其补码互为补数关系

2.补码再求补码等于该补码的原码

3.补码的正零与负零表示方法相同

补码的运算,布布扣,bubuko.com

时间: 2024-10-27 08:29:07

补码的运算的相关文章

关于 原码 反码 补码 位运算

二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 -3 10000000 00000000 00000000 00000011 原码 11111111 11111111 11111111 11111100 反码 先求得-3的补码 11111111 11111111 11111111 11111101 补码 得到3的补码 00000000 000000

java原码,反码,补码 位运算

原码是什么?反码是什么?补码是什么? 原码:正数:正数转换为二进制位就是这个正数的原码负数:负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码 int 2 原码: 00000000 00000000 00000000 00000010 int -2 原码:10000000 00000000 00000000 00000010 00000000 00000000 00000000 00000011 # 3原码10000000 00000000 00000000 00000011 # -3原

Java:二进制(原码、反码、补码)与位运算

一.二进制(原码.反码.补码) 二进制的最高位是符号位("0"代表正数,"1"代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1.  原码:将一个整数转换成二进制表示 以 int 类型为例,int类型占4个字节.共32位. 例如,2 的原码为:00000000 00000000 00000000 00000010 -2的原码为:10000000 00000000 00000000 00000010 2. 反码 正数的反码:与原码相同 负数的反码

类型转换、运算符、位运算符【以及原码、反码、补码】

1.类型转换 php中的‘+’与js有区别,php中+只是算术运算符[更偏向转化为数字].js更偏向转化为字符串 php本身的自动转换类型便符合大多数对类型的处理.[也有强制转换的情形出现] [注意转换关系:字符串转换成数字类型,开头的那部分字符串能够转化为数字(还要判断浮点型和整型)] 2.转换成布尔型[实现流程控制的关键] 以下值为false: (1)布尔值为false (2)整型值为0 (3)浮点型为0.0 (4)空字符串[字符串'0'(相当于是字符串做数组时是一个空字符串),区别,注意‘

二进制的计算(计算机为什么采用补码存储数据)

这里先将二进制的计算可以分为两类,加减运算与乘除运算,本篇讨论的是加减运算. (一)预备知识——数据在计算机的存储与表示 从一个问题入手:java中byte(1字节,8位)的取值范围为:-2^7<=取值范围<=2^7-1,或者写成-128<=取值范围<=127,为什么呢? 疑问:按照我们一般认为,如果8位中一位作为符号,那么应该是11111111<=取值范围<=01111111,或者写成-127<=取值范围<=127,-128从何而来? 首先从原码讲起,原码

原码、反码、补码的求法

在计算机内,定点数有3种表示法:原码.反码和补码.  原码:就是前面所介绍的二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小.  反码:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外.  补码:正数的补码与其原码相同:负数的补码是在其反码的末位加1.  1.原码.反码和补码的表示方法  (1) 原码:在数值前直接加一符号位的表示法.  例如: 符号位 数值位  [+7]原= 0 0000111 B  [-7]原

一张图看懂原码、反码、补码、移码

前言 原码.反码.补码其实两年前就讲过,只是当时的理解太过肤浅或者直接说就是没有理解,因为对于数学比较发怵的我看到那么多的公式很是脑袋大,所以想要硬记也记不住.这次讲课的时候好歹知道了运算规则,但别人一问为什么,立马那个冏啊~好了,废话不多说了,开始进入正题(如果我的理解有偏差,恳请各位大虾不吝指出): 一张图胜过千言万语,下面的这张是本篇想要说的大概内容 原码 我们知道,计算机是以0和1进行运算的,而且内部只有加法运算器,但日常生活中使用的却是十进制,并且有正负之分.于是我们发明了原码:最高位

2015.8.5 循环与函数、位运算

注意点: 1.只有整形才可以用switch. 2.case后面的常量不可以重复 3.default语句可以放在任意位置,但是后面不可以省略break: while: 1.用来处理一些重复执行的操作 2.确定循环终止的条件 (1)在循环开始之前,需要定义一个循环控制变量并将其初始 (2)确定循环的约束条件 (3)在每一次循环结束的时候,在循环中,要去改变循环控制变量的值,让它不间断接近约束条件 注意点: 1.在c语言总任何树枝都有真假性,只有0为 假,其它都为真 2.注意不把==和=混淆了,为了避

【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】

原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创] 第一题 #include<stdio.h> int main() { unsigned int a=6; int b=-20; printf("%d\n",a+b); (a+b)>6? puts(">6"):puts("<=6"); return 0; } 答案是:>6 第二题 #include<stdio.h> int m