二进制

来源:互联网 发布:王者荣耀数据封神榜67 编辑:程序博客网 时间:2024/06/04 19:39
public class TestBinarysystem {/** * 二进制基础: * 计算机中一切数据都是二进制的,基本类型(对象,音频,视频) * 十进制是人类习惯,计算按照人类习惯利用算法输入输出 * "10"->算法转化->1010(2)->算法->"10" * 16进制是二进制的简写,十六进制就是二进制!为了解决符号问题(计算机硬件不支持正负号,使用补码算法!) * 十六进制 * 逢十六进一,基数:16 * 数字:0123456789abcdef * 权:256 16 1 * 权:比如十进制的1511。由于十进制的维权是10,所以这个数=1*1000(10的三次方)+5*100(10的二次方)+1*10(10的一次方)+1*0(10的零次方) * 十进制          十六进制        二进制 *  0            0          0000 0000 *  1            01         0000 0001 *  2            02         0000 0010 *  3            03         0000 0011 *  4            04         0000 0100 *  5            05         0000 0101 *  6            06         0000 0110 *  7            07         0000 0111 *  8            08         0000 1000 *  9            09         0000 1001 *  10           0a         0000 1010 *  11           0b         0000 1011 *  12           0c         0000 1100 *  13           0d         0000 1101 *  14           0e         0000 1110 *  15           0f         0000 1111 *  16           10         0001 0000 *  17           11         0001 0001 *  18           12         0001 0010 *   *  41(16)=4*16+1*1=65(10); *   *二进制与十六进制的转换:4位,4位对应转换; *101001000011000(2)->0101 0010 0001 1000 *                  ->5218(16) *char c = 0x5218;//16,2进制 *补码: *  二进制转换表: *  十进制         二进制 *   15             1111        -1 *   14             1110        -2 *   13             1101        -3 *   12             1100        -4 *   11             1011        -5 *   10             1010        -6 *   9              1001        -7 *   8              1000        -8 *   0              0000 *   1              0001 *   2              0010 *   3              0011 *   4              0100 *   5              0101 *   6              0110 *   7              0111 *  ~4+1 = -4; ~:取反 4 0100 ~ 1011 *  * byte类型 8位补码 * min:1000 0000 * max:0111 1111 *  -1:1111 1111 * short类型 16位补码 * min:1000 0000 0000 0000 * max:0111 1111 1111 1111 *  -1:1111 1111 1111 1111 * int类型 32位补码 * min:1000 0000 0000 0000 0000 0000 0000 0000 * 十六进制:0x80000000 * max:0111 1111 1111 1111 1111 1111 1111 1111 * 十六进制:0x7fffffff *  -1:1111 1111 1111 1111 1111 1111 1111 1111 * 十六进制:0xffffffff * long类型 64位补码 * min:0x80000000 00000000 * max:0x7fffffff ffffffff *  -1:0xffffffff ffffffff *  * 移位运算符: * 1、 * << * 1101001->高位去掉,低位补0->10100110 * 2、 * >> * 011010011->高位补0,低位去掉->11101001 * 3、 * >>> * 011010011->高位补0,低位去掉->001101001 *    @param args */    public static void main(String[] args) {        char f = 0x5218;//16,2进制        System.out.println(f);        int i = -1;//0xfffffff 补码        int max = 0x7fffffff;        int min = 0x80000000;        long maxL = 0x7fffffffffffffffL;        System.out.println(Integer.toBinaryString(i));        System.out.println(Integer.toHexString(i));        System.out.println(Integer.toBinaryString(min));        System.out.println(Integer.toHexString(min));        System.out.println(Integer.toBinaryString(max));        System.out.println(Integer.toHexString(max));        System.out.println(Long.toBinaryString(maxL));        System.out.println(Long.toHexString(maxL));         //二进制运算        int x = 0xfffffffe;//-2        //11111111 11111111 11111111 11111110        int b = x<<1;//数字左移*2        //11111111 11111111 11111111 11111100        int c = x>>1;        //11111111 11111111 11111111 11111111        int d = x>>>1;        //01111111 11111111 11111111 11111111        System.out.println(Integer.toBinaryString(x));        System.out.println(Integer.toBinaryString(b));        System.out.println(Integer.toBinaryString(c));        System.out.println(Integer.toBinaryString(d));        System.out.println(Integer.toHexString(x));        System.out.println(Integer.toHexString(b));        System.out.println(Integer.toHexString(c));        System.out.println(Integer.toHexString(d));    }}