关于原码反码补码的总结报告
1,原码:符号加上数字的⼆进制表⽰ +7:00000111 -7:100000111
2,反码:如果⼀个数为正,他的反码与原码相同,如果是负数那么符号位不变其余位数取反 -7反码:111111000
3,补码:⼀个数如果为正其原码反码补码相同如果是负数那么在反码加⼀
-7 补码:11111001
基本概念
正数(定点⼩数、定点整数):
原码,补码,反码相同;
小数的原码负数(定点⼩数、定点整数):
反码:保持原码符号位不变,数值位取反
补码:第⼀种⽅法给反码的最低位+1就可以啦,若数值最⾼位有进位则丢弃(不向符号位进位)
第⼆种⽅法以原码为基础,符号位不变,其他从最低位开始,直到遇到第⼀个1之前什么都不变,该位之前位依次按位取反,即(推荐)
原码: ([符号位][***][1][n*0]),其对应补码仅需对[***]部分依次取反即可。
例如,当编码总位数为8时有:
+127的原码、反码、补码都为:0 1111111
-127的原码、反码、补码依次为:1 1111111、1 0000000、1 0000001
已知负数的补码,如何获取其⼗进制数?
1.先对各位取反,包括符号位
2.转换为⼗进制数
3.添加负号并减1
例如:对于11111010,取反得00000101,对应⼗进制数为5,由第三步转换可得到结果:-6
为何n位⼆进制数据的表⽰范围是[-2^(n-1),2^(n-1)-1]?
以8位⼆进制为例,-128=(-1)+(-127)=([1000 0001]+[1111 1111])原=([1111 1111]+[1000 0001])补=([1000 0000])补,所以在补码运算结果中,([1000 0000])补就表⽰-128,这就是多出来的⼀位数据。
符号扩展
⽤于在数值类型转换时扩展⼆进制位的长度,以保证转换后的数值和原数值的符号(正或负)和⼤⼩相同,⼀般⽤于较窄的类型(如byte)向较宽的类型(如int)转换。扩展⼆进制位长度指的是,在原数值的⼆进制位左边补齐若⼲个符号位(0表⽰正,1表⽰负)。
Java的数值类型转换规则⼀<Java解惑>总结
1.如果最初的数值类型是有符号的,那么就执⾏符号扩展;如果是char类型,那么不管它要被转换成什么类型,都执⾏零扩展。
2.如果⽬标类型的长度⼩于源类型的长度,则直接截取⽬标类型的长度。例如将int型转换成byte型,直接截取int型的右边8位。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论