最近在笔试时,经常遇到一些与基本数据类型有关的问题,比如他们的长度
所占的字节数目啊,以及相应的为操作啊,所以,这次来做一下总结 ;
四种基本整数数据类型 : 所占字节数目按 2^n增长..... 注意,计算计数范围时,最高位表示的符号位!
注意 : 如果超过了他们范围,怎么办,见例子!
剩下的就是 float , double , char , blooean !
容量小的类型自动转换为大的类型,数据类型按容量大小排序为:
byte, short, char < int < long <float < double
import java.util.Arrays; public class ByteTest{ public static void main(String[] args) { String s = "abcd"; byte[] bytes = s.getBytes(); System.out.println("s转换成字节数组 " + Arrays.toString(bytes)); System.out.println("二进制表示 " + Integer.toBinaryString(123)); System.out.println("十六进制表示 " + Integer.toHexString(12)); s = ""; for (int i = 0 ; i < bytes.length ; i++) { s += Integer.toBinaryString(bytes[i]); } System.out.println("s 装换成 bit " + s); String str = "abcd"; char c = str.charAt(0); int tmp = c; c = (char) (tmp + 1); System.out.println(c + " " + tmp); System.out.println("负数的二进制表示 " + Integer.toBinaryString(-1)); } }
输出 :
s转换成字节数组 [97, 98, 99, 100] 二进制表示 1111011 十六进制表示 c s 装换成 bit 1100001110001011000111100100 b 97 超过byte的范围后 -126 超过byte的范围后 -128 负数的二进制表示 11111111111111111111111111111111
负数的二进制表示 怎么计算的?
负数的二进制表示就为他的补码;
那么补码怎么求了,我们知道正数的原码, 补码 ,反码都是一样;
求负数的二进制表示,首先就得由相应正数的原码 按位取反 得到 反码 , 然后 反码 最后一位 +1 得到的结果就为补码,也就是它的二进制表示!
不如说,上面的 - 1 :
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111
详情可参考这篇文章 : http://www.cnblogs.com/aspnet2008/archive/2009/04/29/1446471.html
位操作
Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。
这篇博文不错 : http://blog.csdn.net/xiaochunyong/article/details/7748713