首页 > 其他分享 >原码、反码、补码、移码

原码、反码、补码、移码

时间:2024-02-03 17:56:29浏览次数:22  
标签:反码 21 补码 取反 移码 原码

原码、反码、补码、移码

背景:为了解决计算机中减法计算的问题,因为计算机中只有加法器,减法的计算是要转换成加法才能进行。

原码

二进制首位为标志位

正数 标志位为0

0 x x x x x x x

负数 标志位为1

1 x x x x x x x

示例:

14 = 00001110

-21 = 10010101

反码

正数:原码、反码、补码相同,为原码本身。

负数:原码 -> 反码:标志位(也就是符号位)不变,其他取反

14 : 0000 1110

-21: 1110 1010 计算方法如下

-21原码:10010101
取反:   11101010

补码

补码在反码的基础上加1,符号位保持不变

补码 = 反码 + 1

-21 = 1110 1011

移码

我们都知道正数的原码、反码、补码相同,为原码本身,但是移码是在补码的基础上符号位取反的。

负数的移码是在其补码的基础上符号位取反的来的。

移码 = 补码符号位取反

总的来说,移码是在补码的基础上,符号位取反得来的。

示例:

-21的移码:

-21 = 0110 1011

计算机内计算方式

示例1:

14 + (-21) = -7 (11111011就是-7的补码)

采用的是 补码 + 补码 的方式

最后将 补码 -> 反码 -> 原码

示例2:

14-(-21)= 14 + 21 = 35

知识点补充与总结

(1)8位二进制数能表示的十进制数范围为-128到+127

(2)如果数小于-128或大于127,则会溢出,溢出只能用两个字节,16位二进制数表示了
(3)0的补码为00000000,-128的补码为10000000:
(4)计算机中有符号数用补码表示
(5)原码首位为标志位,1表示负数,0表示正数:
(6)反码 = 原码的标志位不变,其他取反
(7)补码=反码 + 1;
(8)正整数的原码、反码、补码相同

标签:反码,21,补码,取反,移码,原码
From: https://www.cnblogs.com/dongyaotou/p/18005004

相关文章

  • 进制转换和原码、反码、补码
    进制转换进制介绍进制转换第一组:其它进制—>十进制二进制转十进制八进制转十进制十六进制转十进制第二组:十进制—>其它进制十进制转二进制规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。十进制转八进制规则:将该数......
  • 关于二进制的原码、补码和反码,以及表示范围、常见位运算符和进制转换的理解与简述
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17963363出自【进步*于辰的博客】参考笔记一,P3.13、P5.1;笔记三,P43.1/3、P44.1。注:我暂且没有整理关于二进制、原码、补码和反码等概念的理论,本文中的阐述都基于我对相应......
  • 运算符--原码、反码、补码
    运算符--原码、反码、补码原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。利用原码对正数进行计算是不会有问题的。但如果是负数计算,结果就出错,实际运算的结果,跟我们预期的结果是相反的。原码的弊端:利用原码进行计算的时候,如果是正数完全没有问题。但是如果是......
  • 位运算(原码,反码,补码)
    免责声明:java基础资料均来自于韩顺平老师的《循序渐进学Java零基础》教案,具体视频内容可以去B站观看,这些资料仅用于学习交流,不得转载用于商业活动1.位运算1.1原码,反码,补码对有符号的数而言:二进制的最高位是符号位:0表示正数,1表示负数(0->01->-)正数的原码,反码,补码都一样(三码......
  • 原码、反码、补码再探
    原码、反码、补码再探概述三个计算机用来表达负数的形式。原码通过第一位的\(0\)来直接表示正数,\(1\)来直接表示负数。然而计算机并不用这种方式。反码即把要表示的负数的绝对值对应的二进制全部取反来表示。坏处是\(0\)有两种表达方式,全\(0\)和全\(1\),所以......
  • 补码减法与溢出
    已知二进制数x=-0.11011,y=0.10101,用补码计算x-y,同时指出运算结果是否溢出。(设字长8位)。如何求负的小数的二进制补码?负的小数的二进制补码可以通过以下步骤求得:将小数部分转换为二进制形式。将整数部分和小数部分合并为原码。将原码取反得到反码。对反码加1得到补码。二进......
  • 补码表示法
    所谓的补码表示法,它是有符号整数最常用的二进制表示法。对正数求反码(即对每个位进行NOT运算),然后加1,舍弃MSB的任何进位,就可以得到这个数字的负数。表示+1的0001的反码是1110,加1就可以得到表示–1的1111。同理,+2是0010,它的反码是1101,再加1就可以得到表示–2的1110。......
  • 补码反码
    #include<bits/stdc++.h>usingnamespacestd;intmain(){boolTGDCN=true;strings;stringa;cin>>s;a=s;if(s[0]=='0'){cout<<s;}else{for(inti=1;i<s.size();......
  • 原码--转--反码--补码
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ stringa; cin>>a; intn=a.size(); if(a[0]=='0'){ cout<<a; }else{ for(inti=1;i<=a.size();i++){ if(a[i]=='1'){ a[i]='0'; }else{......
  • 原码转补码反码
    #include<bits/stdc++.h>usingnamespacestd;stringa;intc=0;voidfam(){ if(a[0]=='0'){ cout<<a; }else{ cout<<'1'; for(inti=1;i<a.size();i++){ if(a[i]=='0'){ cout<<'1';......