这是因为位数不够造成的,即最高位前有溢出位。溢出位为1时,表示该数为负数。而负数是利用补码进行计算的;就是将该数的数字位全部取反,1转换为0,0转换为1,然后加1。11111111的补码是0,0+1=1,所以表示的是-1.
-1的原码是10000001,负数的补码是原码(除符号位外)各位求反加1,除符号位各位求反后是11111110,再加1就刚好是11111111。
int 32位整型;char 16位整型;byte 8位整型;负1:在内存中的形式:是以补码的形式存在,最高位符号位是1 (a).拿正1的源码,首位取反(因为正1的符号位是0,正数都是0,符号位取反就是负数了)(b).其他数值位,按位取反,得到反码 (c).末尾在加1,就是负1的补码了 ...
byte 是一个字节,-1的二进制位补码是11111110 , 255是int类型数据,有4个字节,二进制数为00000000 ...
这里要更正一个问题。题目所问的其实并不是长度,而是能表示的最大整数。因为每一个字节有8个二进制位,而unsigned byte占一个字节。所以它能表示的最大整数,就是2的8次方减1。至于说为什么要减1,这是因为它能表示最小的数是0。0~255,总共就是256种不同的状态。如果说是byte,同样是一个...
byte值可以是-1..readpublic int read(byte[] b) throws IOException从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法
负数的二进制补码表示
从上表中我们可以看出,0在原码和反码中有两种表示方式,而对应的补码只有一种表示方式,-128在原码和反码中无法表示,在补码中却可以表示(用-127的补码1000 0001减1得到1000 0000)。而计算机中数值以补码形式存储和运算,当然-128可以表示出来,因此8位有符号数值的范围是-128~127,同理其他位数(16、32、64)也可以...
刷刷题APP(shuashuati.com)是专业的大学生刷题搜题拍题答疑工具,刷刷题提供byte类型的-1和int类型的-1值不相等,因为一个是0xFFFF,一个是0xFFFFFFFF。A.正确B.错误的答案解析,刷刷题为用户提供专业的考试题库练习。一分钟将考试题Word文档/Excel文档/PDF文档转化为在线题
根据>>>运算符的规则,右移之后在空位补零,因此右移一位之后,变成:01111111111111111111111111111111 这个就是最终的结果了,换为十进制的数的话,就是:2147483647。byte的话,因为byte是8位的,因此同理:byte=-1的二进制表示为:11111111 根据>>>规则,变为:01111111 二进制就是:127啦 参考资料...