原码,反码,补码,移位

原码,反码,补码,移位,第1张

概述https://www.cnblogs.com/btgyoyo/p/6371398.html 复习下二进制的有关知识 1.所有的数据都是以二进制的形式存储在硬盘上。对于一个字节的8位到底是什么类型 计算机是如何分辨的呢? 其实计算机并不负责判断数据类型,数据类型是程序告诉计算机该如何解释内存块. 2.对于字符的存储,先将字符转化成其字符集的码点,(码点就是一个数字),然后把该数字转成2进制存储。所

https://www.cnblogs.com/btgyoyo/p/6371398.html

复习下二进制的有关知识

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 -> 原码同补码一样 对应十进制:02、-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。

总结

以上是内存溢出为你收集整理的原码,反码,补码,移位全部内容,希望文章能够帮你解决原码,反码,补码,移位所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1075552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存