hax*_*ode 2 java bit-shift bit bitwise-operators
我认为理解他们从根本上做什么 - 操作位(翻转,移位,反转等).
我的问题是我不知道什么时候需要使用它们,我认为我不完全理解它.
我知道一个字节有8位,我知道这些位是a 0或1.现在,我开始感到困惑......我相信数据类型以不同方式定义位组合.因此,如果我声明一个int,为数字留出32位,如果我声明一个char,则留出8位,该数据类型的位定义一个字母.
运行这个想法,我在java中做了以下基本操作让我困惑:
int num = 00000010;
System.out.println(num);
Run Code Online (Sandbox Code Playgroud)
这打印8,如果我这样定义num:
int num = 00000100;
System.out.println(num);
Run Code Online (Sandbox Code Playgroud)
这打印 64
所以用按位操作练习(只是为了它的地狱)我试过这个:
int num = 00000010 << 1;
System.out.println(num);
Run Code Online (Sandbox Code Playgroud)
它打印的16位置我认为它会将位向左移动并打印64.
这里发生了什么,何时需要应用这种操作位的方法?
指定带前导零的数字时,您不小心指定了八进制文字.
00000010 => 1*8^1 + 0*8^0 => 8
00000100 => 1*8^2 + 0*8^1 + 0*8^0 => 64
Run Code Online (Sandbox Code Playgroud)
在JLS,第3.10.1节,描述八进制和二进制文字:
八进制数字由ASCII数字0后跟一个或多个散布有下划线的ASCII数字0到7组成,并且可以表示正整数,零整数或负整数.
二进制数字由前导ASCII字符0b或0B后跟一个或多个散布有下划线的ASCII数字0或1组成,并且可以表示正整数,零整数或负整数.
你将你的位移8到左边,有效地将它乘以2得到16.比特:
00000100 => 00001000
(8 => 16)
Run Code Online (Sandbox Code Playgroud)
二进制文字用前导表示0b,例如:
0b000010 => 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |