所有整数在计算机中都是以补码来存储的,首位0,表示正数,首位1,表示负数
什么是补码?
1、正整数的补码是基本身的二进制数
2、负整数的补码是:
先求该负整数相对应的正整数的二进制代码,然后全部取反,末尾加1,不够位数时,左边全部补1。
不哆位数的解释:如要存储int型的整数,一般是4个字节大小,那32位二进制,如果一串负整数对应二进制码不够32位,则左边全部补1。
已经补码求原数?
如果首位是0,则表明是正整数,直接把二进制转成十进制即可;
如果首位是1,则表明是负整数,则将所有位取反,末尾加1,所得即是该负整数的绝对值。
溢出的问题?
int i = 128;则转成补码应该是:
00000000000000000000000010000000,但如果把128赋给char型,即一个字节,则其补码是10000000,它是一个负数(-128),也就是说char型最高存储-128-127之间的数,再多就会溢出;
在进行不同类型相互赋值时经常会出现这样 的问题“丢失进度”。