数据在硬件底层的存储格式为补码存储。
整数的补码为其原码,而负数的补码为其原码逐位求反(符号位)除外后加1。
程序在运行时,存储或者提取数据,底层硬件都会将其按照指定的格式转化。而运算都是利用补码
执行相应的运算后再转化提交。
以下为一个实验:
package com.test.codetest;
public class NumTest {
public static void main(String[] args) {
int a=145;
System.out.println((byte)a);
}
}
整理因为int型145的存储方式(补码)为00000000 00000000 00000000 10010001
转化为byte后的存储为 10010001
而它的补码为 11101111
转化后就是-111
而输出结果就是-11,假设成立