8月 162019
对于正数来说,左移1位相当于这个数值翻倍,或者对于类型为int的负数来说,左移一位也是翻倍
但是对于类型小于int的类型,比如short和byte,本来以为左移并不会带符号,但经过测试不是这样的,看代码:
1 2 3 4 5 6 7 8 9 10 |
byte moveb = -3; System.out.println("moveb: " + moveb + " " + ConvertUtils.byte2binary(moveb)); int move_L1 = moveb << 1; System.out.println("左移1位: " + move_L1 + " " + ConvertUtils.int2binary(move_L1)); int move_L8 = moveb << 8; System.out.println("左移8位: " + move_L8 + " " + ConvertUtils.int2binary(move_L8)); int move_L16 = moveb << 16; System.out.println("左移16位: " + move_L16 + " " + ConvertUtils.int2binary(move_L16)); int move_L24 = moveb << 24; System.out.println("左移24位: " + move_L24 + " " + ConvertUtils.int2binary(move_L24)); |
左移后为int型数值,本来以左移8位后,前16位会用0填充,但是没有,左移是带符号移位的,看运行结果如下:
1 2 3 4 5 |
moveb: -3 11111101 左移1位: -6 11111111 11111111 11111111 11111010 左移8位: -768 11111111 11111111 11111101 00000000 左移16位: -196608 11111111 11111101 00000000 00000000 左移24位: -50331648 11111101 00000000 00000000 00000000 |
好,我们再看看其他情况的。
1、byte为正数的情况,moveb = 2的运行结果
1 2 3 4 5 |
moveb: 2 00000010 左移1位: 4 00000000 00000000 00000000 00000100 左移8位: 512 00000000 00000000 00000010 00000000 左移16位: 131072 00000000 00000010 00000000 00000000 左移24位: 33554432 00000010 00000000 00000000 00000000 |
Sorry, the comment form is closed at this time.