
在java中, 一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方怎么理解?
3个回答
展开全部
一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方怎么理解?
=============
这么理解
一个10进制数左移n位,就是将这个数乘以10的n次方,右移就是将这个数除以10的n次方
比如1,左移2位,得100(十进制),
一个 2进制数左移n位,就是将这个数乘以 2的n次方,右移就是将这个数除以 2的n次方
比如1,左移2位,得100(二进制),换十进制等于4
位运算是以2进制操作。
=============
这么理解
一个10进制数左移n位,就是将这个数乘以10的n次方,右移就是将这个数除以10的n次方
比如1,左移2位,得100(十进制),
一个 2进制数左移n位,就是将这个数乘以 2的n次方,右移就是将这个数除以 2的n次方
比如1,左移2位,得100(二进制),换十进制等于4
位运算是以2进制操作。
展开全部
要把这个数二进制化就能理解了。如十进制的2,二进制表示是0010。2左移3位,就是在二进制的低位补3个0,然后变成00010000,转成十进制就是16,即2*2^3。右移也是一样的理解就好了。
追问
右移的话,最高位是1的话空位是补1的,最高位是0的话空位补0,这个好像不符合那个右移的规律啊!
追答
右移的话要分带符号位和不带符号位两种。
计算机中的数都是二进制表示的,以8位的byte类型表示为例,5可以表示为:00000101(最高位表示符号,0位正,1为负)
无论>>还是>>>都是针对二进制数进行操作的。
1、右移运算符>>使指定值的所有位都右移规定的次数。右边移出去的部分扔掉不要,左边空出来的部分用原来的数字填充(这就是所谓的带符号右移)
——比如说5,右移后为00000010。
——你给的例子,假设x=-12,表示为32位int型就是
11111111111111111111111111110100
x>>3即带符号右移3位,结果是
11111111111111111111111111111101,化为十进制等于-3
2、>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
——比如你的例子,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我们生活中用的就是十进制:一位最多有九个数字(最大的就是9)超过了就要进位(10就是超过9进位得到的)
再想想我们平时在一个数的后面加n个0减n个0的是不是相应的乘了或者除了n个10?相应的是不是乘了或者除了10的n次方?现在换成二进制了而已。
再想想我们平时在一个数的后面加n个0减n个0的是不是相应的乘了或者除了n个10?相应的是不是乘了或者除了10的n次方?现在换成二进制了而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询