1条回答 默认 最新
- 爱晚乏客游 2021-05-07 22:03关注
java的byte数据类型类似于C/C++的char类型,取值都是[-128,127],也就是一个字节 ,8bite,而且在计算机内存当中负数都是以补码的形式存在的,所以-128(byte)在内存当中是1000 0000 (反码0111 1111 + 1) 而且第一位是符号位。int类型4个字节,32bite.
重点就是,int在强制转成byte(c++的char)的时候会强制截断,也就是说32bite的int类型只要最后8bite!!!!
所以1200=100 1011 0000(前面还有0我没写),在截断之后变成了1011 0000。然后再看我上面讲的,byte是有符号位的,所以第一位是符号位1,表示负数,1011 0000是一个负数,然后后面的就是补码转成原码的过程了。
补码=反码+1 =(原码取反)+1 所以推理得到
原码=(补码-1)再取反。
1011 0000-1=1010 1111 取反=0101 0000=80。然后最重要的是,这个数是个负数,所以有:
1200 =-80
搞清楚原理之后,还有个简单的计算方法,那就是对256进行取模,看结果是不是在[-128,127]之间,如果不在,那么要再减去256就是最终的结果。
比如1200%256=176>127.所以176-256=-80.
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报