byte存储int数据溢出,原理是什么?

//a.直接将大类型数据存储到小类型变量中,可能会导致数据溢出
int q = 500;
byte w = 5;
w = (byte)q;
System.out.println(w);
结果为啥是 -12;
不应该是能存多少是多少嘛,属实搞不懂

byte的取值范围是-128到+127,超过了就会溢出,因为byte只有一个字节大小

int4个字节 500在内存中存储的是(0x000001f4),强制转换成byte后得到的值是0xf4(取低八位) ,二进制码为 1111 0100 最高位为符号位,这里是1,表示是负数,值位取其补码
0000 1011 0x0b=12,因此结果是-12
计算机存储中,正数存原码;负数最高位为符号位,值存补码

见过手表吗,时针转一圈是12小时,1点是指向的1,13点也是指向的1