1.对一个二进制数 1100 1111 1100 0111 转化为十进制是多少?
如果最高位是符号位转换成十进制为 -12345, 而如果最高位不是符号位则为 53191
如何怎么判断1100 1111 1100 0111最高位是否是符号位呢?
不能判断 数据本无型,原本在人心.你想把它当做有符号就有符号,你想把它当做无符号就是无符号.它本身并没有类型区别.
2.对于 _ _ _ _ _ _ _ _ 八个bit表示的数
你认为它是无符号的,那么它可以表示0~255共计256个数字
你认为它是有符号的,那么它只能表示-128~127共计256个数字
3.计算机中存储的都是二进制
bit(位):b,也称为比特(bit),每个二进制数字0或1就是一个位(bit). 8b(bit)=1B(byte 字节)
对于上面的问题,我们在使用前必须明确是否有符号位。
在Java中所有的数据类型都是有符号类型。其他语言有无符号位的类型
在java中约定了8种基本数据类型,其中占用的字节数如下
字节 | 二进制位数 | 符号位 | 共有多少个数 | 取值范围-最小值 | 取值范围-最大值 | |
byte | 1 | 8 | 有 | 2^7=128 | -2^7 | 2^7-1 |
short | 2 | 16 | 有 | 2^15=32768 | -2^15 | 2^15-1 |
int | 4 | 32 | 有 | 2^31 | -2^31 | 2^31-1 |
long | 8 | 64 | 有 | 2^63 | -2^63 | -2^63-1 |
boolean | 1 | 8 | 无 | 2 | false(默认) | true |
char | 2 | 16 | 无 | 2^16=65536 | 0 | 2^16-1 |
float | 4 | 32 | 有 | - | - | - |
double | 8 | 64 | 有 | - | - | - |
正数的原码、反码、补码都一样
负数的反码 = 它的原码符号位不变,其他位取反(0 ->1 ; 1->0 );
负数的补码 = 它的反码 +1;
在计算机运算的时候,都是以补码的方式来运算的(符号为也运算);