Java 在计算机系统中,数值一律用补码来表示(存储)

源于牛客网上刷题,觉得还挺有代表性的,尤其是在二进制上是个代表

例如: byte b = (byte)129;

求b=?

 

解答如下:

这题考察的就两个知识点:一、强制转换(主要涉及各个类型占几个字节,这里我只简单说一下byte型占一个字节,也就是8位,int型4个字节,32位);二、在计算机系统中,数值一律用补码来表示(存储)

正数:补码=反码=原码;  负数:负数反码除了符号位不变,其他位取反,补码=反码+1;

129 int类型(4个字节)二进制: 00000000 00000000 00000000 10000001
强制转换byte型后,只有一个字节即 10000001(强转之后的源码)(注意这里从二进制角度看,第一位是符号位,即接下来求负数的补码)
只要求出上面原码对应的补码就行了,然后再转换对应的int型数值(因为题干所给的答案都是比较int型)
10000001(原码) 对应的反码为1111 1110
又补码等于反码+1
即1111 1111  该二进制转换int型刚好是-127(1+2+4+8+16+32+64)
posted @ 2019-06-21 16:56  浪哥学习笔记  阅读(720)  评论(0编辑  收藏  举报