原码,反码,补码,移位

btg.yoyo btg.yoyo     2022-08-22     731

关键词:

复习下二进制的有关知识

1.所有的数据都是以二进制的形式存储在硬盘上。对于一个字节的8位到底是什么类型 计算机是如何分辨的呢? 其实计算机并不负责判断数据类型,数据类型是程序告诉计算机该如何解释内存块.

2.对于字符的存储,先将字符转化成其字符集的码点,(码点就是一个数字),然后把该数字转成2进制存储。所以我们只要记得数字的存储就ok了。字符的码点程序采用无符号处理,即没有符号位,数值型默认都是有符号位的。

1个字节的最高位是符号位所以一个数字能够存储的范围是-128-127

3.原码

正数5: 0000 0101

负数5: 1000 0101

4.反码

正数5: 0000 0101

负数5: 1111 1010

5.补码

正数5: 0000 0101

负数5: 1111 1011(-5在硬盘上的存储方式)

1.可以看到正数的原码 与 其反码补码相同
2.负数的原码最高位为1
3.负数的反码: 符号位不变,其余各位按位取反
4.负数的补码:在其反码的基础上+1
5.负数是以其补码的方式存储在硬盘上的

 

 6.左移操作(<<)

规则:
右边空出的位用0填补
高位左移溢出则舍弃该高位。
计算机中常用补码表示数据:
数据 127,补码和原码一样:0111 1111

左移一位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2
左移二位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4
左移三位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8
左移四位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16
左移五位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32
左移六位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64
左移七位: 1000 0000   -> 这个补码对应的原码为:1000 0000  对应十进制:-128
左移八位: 0000 0000   -> 这个补码对应的原码为:0000 0000  对应十进制:0
 
 
注:
原码到补码的计算方式:取反+1,
补码到原码的计算方式:-1再取反。
 
 
 
数据-1,它的原码为1000 0001,补码为1111 1111
左移一位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2
左移二位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4
左移三位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8
左移四位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16
左移五位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32
左移六位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64
左移七位: 1000 0000   -> 这个补码对应的原码为:1000 0000  对应十进制:-128
左移八位: 0000 0000   -> 这个补码对应的原码为:0000 0000  对应十进制:0
 
可以看出127和-1的结果完全一样。移位操作与正负数无关,它只是忠实的将所有位进行移动,补0,舍弃操作。

 

7.右移操作( >>)

规则:
左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;
低位右移溢出则舍弃该位。

1、127的补码:0111 1111
右移一位: 0011 1111 -> 原码同补码一样 对应十进制:63
右移二位: 0001 1111 -> 原码同补码一样 对应十进制:31
右移三位: 0000 1111 -> 原码同补码一样 对应十进制:15
右移四位: 0000 0111 -> 原码同补码一样 对应十进制:7
右移五位: 0000 0011 -> 原码同补码一样 对应十进制:3
右移六位: 0000 0001 -> 原码同补码一样 对应十进制:1
右移七位: 0000 0000 -> 原码同补码一样 对应十进制:0
右移八位: 0000 0000 -> 原码同补码一样 对应十进制:0
2、-128的补码:1000 0000
右移一位: 1100 0000 -> 这个补码对应的原码为:1100 0000 对应十进制:-64
右移二位: 1110 0000 -> 这个补码对应的原码为:1010 0000 对应十进制:-32
右移三位: 1111 0000 -> 这个补码对应的原码为:1001 0000 对应十进制:-16
右移四位: 1111 1000 -> 这个补码对应的原码为:1000 1000 对应十进制:-8
右移五位: 1111 1100 -> 这个补码对应的原码为:1000 0100 对应十进制:-4
右移六位: 1111 1110 -> 这个补码对应的原码为:1000 0010 对应十进制:-2
右移七位: 1111 1111 -> 这个补码对应的原码为:1000 0001 对应十进制:-1
右移八位: 1111 1111 -> 这个补码对应的原码为:1000 0001 对应十进制:-1
常见应用
左移相当于*2,只是要注意边界问题。如char a = 65; a<<1 按照*2来算为130;但有符号char的取值范围-128~127,已经越界,多超出了3个数值,所以从-128算起的第三个数值-126才是a<<1的正确结果。
而右移相当于除以2,只是要注意移位比较多的时候结果会趋近去一个非常小的数,如上面结果中的-1,0。

 

原码反码补码

 对于原码反码补码的问题,对应的在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码表示法规定:正数的反... 查看详情

原码,反码,补码

对于一个数,计算机要使用一定的编码方式进行存储。原码,反码,补码是计算机存储一个具体数字的编码方式原码就是这个数的二进制表示,例如:1000001就是-10000001就是+1正数的反码和补码与原码相同反码的表示方法是:正数... 查看详情

原码反码补码

1.原码(红色代表符号位,0表示整数,1表示是负数)00000001 //表示正数110000001 //表示负数12.反码正数的反码是其本身,保持不变。负数的反码是在其原码上,符号位不变,其余位取相反数。正数原码00000001反码等于00000001负数原... 查看详情

原码反码补码

概述:数值的表示方法——原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值反码正数:反码与原码相同负数:符号位为1,其余位对原码取反补码正数:原码、反码、补码相同负数:最高位为1,其... 查看详情

原码反码补码

0,计算机存储负值以补码形式存储。1,正数的原码,反码,补码都一样。2,负数的反码:符号位不变,其他位按位取反;负数的补码:此负数的反码+1;3,补码的补码是原码。由补码推导原码两种方法:1,对此补码求补码,2... 查看详情

原码补码反码

二进制计算机中,数值的二进制一律用补码表示;正数原码:按照绝对值大小转换成的二进制数;反码:与原码相同;补码:与原码相同;负数原码:按照绝对值大小转换成的二进制数,然后最高位赋为1;反码:对该数的原码... 查看详情

原码反码补码

1.原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。2.反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外... 查看详情

移位位与或异或非(代码片段)

...,除了位非(~)是一元操作符外,其它的都是二元操作符。原码、反码、补码原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。00000000000000000000000000000101是5的原码反码:将二进制数按位取反,所得的新二进制数称为... 查看详情

原码反码补码的求法

    在计算机内,定点数有3种表示法:原码、反码和补码。 原码:就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码:正数的反码与其原... 查看详情

原码,反码,补码详解

...ziqiu/archive/2011/03/30/ComputerCode.html本篇文章讲解了计算机的原码,反码和补码.并且进行了深入探求了为何要使用反码和补码,以及更进一步的论证了为何可以用反码,补码的加法计算原码的减法.论证部分如有不对的地方请各位牛人帮... 查看详情

原码,反码,补码详解

原码,反码,补码详解本篇文章讲解了计算机的原码,反码和补码.并且进行了深入探求了为何要使用反码和补码,以及更进一步的论证了为何可以用反码,补码的加法计算原码的减法.论证部分如有不对的地方请各位牛人帮忙指正!希望... 查看详情

原码,反码,补码详解

原码,反码,补码详解本篇文章讲解了计算机的原码,反码和补码.并且进行了深入探求了为何要使用反码和补码,以及更进一步的论证了为何可以用反码,补码的加法计算原码的减法.论证部分如有不对的地方请各位牛人帮忙指正!希望... 查看详情

原码反码补码

...的补码形式”,原因是:补码形式效率高3.二进制有:原码、反码、补码4.对于一个正数来说:二进制原码、反码、补码都是同一个,完全相同。  如inti=4;  对应的原、反、补码都是:000000000000000000000000000001005.对于一个... 查看详情

原码反码补码详解

这是我找到的最易懂的原码、反码、补码的解析。本文借鉴博客:https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 本篇文章讲解了计算机的原码,反码和补码.并且进行了深入探求了为何要使用反码和补码,以及更进一步... 查看详情

原码反码补码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。补码的表示方法是:正数的补码就是其本身;... 查看详情

原码反码补码移码

    数值1数值-11-1原码000000011000000110000010反码000000011111111011111111补码000000011111111100000000移码1000000101111111100000001个字节8个bit首位0表示正数,1表示负数正数的反码和补码不变。负数的反码为首位不变,后面全部取反... 查看详情

原码,反码和补码学习报告

    放假这几天,重新学习了原码反码和补码的相关知识。对原码反码和补码有了重新的认识。所以写了这篇博客,作以总结。    学习原码反码补码时主要是看了叶子秋前辈的博客(http://www.cnblogs.co... 查看详情

关于原码补码反码的理解

补下基础-- 原码、补码、反码-- 正数补码、反码都和原码一样,符号位为0--负数原码 符号位为1,其他位为绝对值表示的二进制数     反码 原码符号位不变、其他位按位取反    &nbs... 查看详情