java数据类型转换
long a = 800; //long是64位二进制数 8个字节
int b = (int)a; //int是32位二进制数 4个字节
short c = (short)b; //short类型是16位二进制数,0000 0000 0000 0000 2个字节
byte d = (byte)c; //byte类型是8位二进制数,256个数(-128~127),0000 0000 1个字节
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
当强转时,高位会丢失。例如,short = 800的二进制是0000-0011-0010-0000,
- byte,bit,
1Byte=8bit
1KB=1024B
1MB=1024KB(2的十次方)
- 为什么电脑IPv4地址最大值是255?
IPv4地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)
8个二进制位一共可以表示2^8=256个数,即0~255。
- IPv6详解
IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法。
一、冒分十六进制表示法
格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16bit(位),以十六进制表示,例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
这种表示法中,每个X的前导0是可以省略的,例如:
2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A
二、0位压缩表示法
在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:
FF01:0:0:0:0:0:0:1101 → FF01::1101
0:0:0:0:0:0:0:1 → ::1
0:0:0:0:0:0:0:0 → ::
三、内嵌IPv4地址表示法
为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96bit采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用
笔试题:
short s1 = 1; s1 = s1 + 1;有错吗?
short s1 = 1; s1 += 1;有错吗?
对于short s1 = 1;
s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,
需要强制转换类型才能赋值给short型。
而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;
相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。