首页 > 编程知识 正文

原码取反,源码 反码 补码 详解

时间:2023-05-06 14:59:59 阅读:39476 作者:2745

一、基础概念1.1理论正数原码、反码、补码均相同负数补码=反码1; 反码=在反取原始码的计算机中,数值一律用补数表示并存储。 这是因为,补码解决了正负符号的问题,并且在便于加减运算的补码中,最高位比特是编码比特,其馀的数据类型的长度根据数据比特而不同。 这样设计是为了节约资源,使不需要的编码比特不与数据比特加减运算有关,并在编码比特溢出的情况下丢弃。 例如,符号位为1,加1等于10。 此时,溢出的1.2种情况下的Java将截断byte类型、长度为1字节8位8位长的数据类型、1位编码位和7位数据位。 该类型的可能值范围:-128~127二进制补码,1000 0000 ~ 0111 1111-128不能用原码或反码表示。 由于8位长原代码和反码的可取值的范围为-127至127,所以为了在数的表现中消除编码图的不唯一性,无论人为规定为-128的补数为1000 00000的正数、负数如何, 0的补数为0000 0000数值的原码反码补数0-正数00000000000000000000 -负数0000000000000000001111111111111111111111111111111111111111111111111111110

7的补码计算过程

a、7为正数,因此补码=反码=原码b、7为十进制数,将其转换为二进制数,原码原码:7 -- 0000 0111反码: 0000 0111补码: 0000 0111 http://ww.Sina

a、-7位负数,所以补码=反码1=原码取反码1b,原码没有正负数,都是用正数计算,所以-7的原码仍然用7计算。 c、7是十进制数,将其转换为二进制数,原码原码:7 -- 0000 0111d,原码反转,反码反码: 0000 0111 -- 1111 1000e,反码加1,互补码

2.2按位反转背景: java或数据库具有运算符“~”,表示按位反转。 即字义:数值的各位取反,包含符号的位,其本质为01、10

问题:~7的结果是多少? -7的结果是什么?

-7的补码计算过程

a、7补数: 0000 0111b,逐位翻转: 1111 1000c,补数1111 1000原数值为-8(具体推导见上一节)7的计算过程

a、-7补数: 1111 1001b,逐位翻转: 0000 0110c,补数: 0000 0110原数值为6 (具体推导见上一节)-7的计算过程

结论:~x=-x-1

2.3加减法问题:计算7 3和7-3,说明其过程?

java程序

a、7补数: 0000 0111; 的补数(0000 0011b,补数相加,所有二进制一,符号位溢出,舍弃70000011300000000011---------0000 1010 c,补数为) 00001010的原始数值为103310

将a,7-3等式转换为-3 7b,-3的补数。 原码反码补码0000011---- 11111100---- 1111101 c,补码加起来,均为二进制1,符号溢出为700000111------------------------------。

长度类型:

字节(字节) 1字节=8位字(WORD ) 1字=2字节=16位双字(DWORD ) 2字=4字节=32位四字(QWORD ) 4字=8字节=64位

hex :十六进制dec :十进制oct :八进制xhd :二进制

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。