| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:有关JAVA位运算的问题
只看楼主 加入收藏
josephzzq
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-3-18
收藏
 问题点数:0 回复次数:6 
有关JAVA位运算的问题
我在书里看到>>、<<、>>>运算符,说是>>>是用0填充前面的位,>>是用符号为填充左侧的位。不大理解这个解释,麻烦懂这个的详细解释一下,最好举个例子
问题补充:在JAVA2核心技术卷1上看到的。首先对于>>,何为用符号填充左侧的位?符号是什么?第二,就拿1>>>8来说,1是1,8是1000,怎么用0填充啊?
还有,这个移位运算到底有什么意义?有什么作用?
小弟非常的菜,还请高手指点
问题补充:麻烦例子通俗点,小弟我实在看不懂~,最好先举正数,再举负数,如果还有其它特殊的例子,也请列出来
谢谢!
搜索更多相关主题的帖子: JAVA 运算 
2007-04-03 00:52
支离破碎
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:737
专家分:0
注 册:2007-1-4
收藏
得分:0 
位运算就是把数转化成二进制,然后进行移位操作。

如:2<<1 =======》2左移1位
2 ----> 转化成二进制为 10 然后左移 1位,就是 100 ---->转化成十进制就是 4

人生漂泊無依,有如浮萍菱花,隨水飄流,你会在我这里停留吗?
[url=http://51mynet.]http://51mynet.[/url]
2007-04-03 09:14
狂飙的蜗牛
Rank: 1
等 级:新手上路
帖 子:174
专家分:0
注 册:2007-1-23
收藏
得分:0 
下面是移位运算的例子:

1357 = 00000000,00000000,00000101,01001101;
-1357 = 11111111,11111111,11111010,10110011;

1357>>5 = 00000000,00000000,00000000,00101010;
-1357>>5 = 11111111,11111111,11111111,11010101;

1357>>>5 = 00000000,00000000,00000000,00101010;
-1357>>>5 = 00000111,11111111,11111111,11010101;


1357<<5 = 00000000,00000000,10101001,10100000;
-1357<<5 = 11111111,11111111,01010110,01100000



2007-04-03 09:26
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
以下是引用josephzzq在2007-4-3 0:52:36的发言:
我在书里看到>>、<<、>>>运算符,说是>>>是用0填充前面的位,>>是用符号为填充左侧的位。不大理解这个解释,麻烦懂这个的详细解释一下,最好举个例子
问题补充:在JAVA2核心技术卷1上看到的。首先对于>>,何为用符号填充左侧的位?符号是什么?第二,就拿1>>>8来说,1是1,8是1000,怎么用0填充啊?
还有,这个移位运算到底有什么意义?有什么作用?
小弟非常的菜,还请高手指点
问题补充:麻烦例子通俗点,小弟我实在看不懂~,最好先举正数,再举负数,如果还有其它特殊的例子,也请列出来
谢谢!

>>是有符号移位,而>>>是无符号移位

比如二进制为01000011的数用>>和>>>移都是一样的,都是在高位补0.而10001001要移位则不一样了

10001001>>2的结果是11100010它会看高位,如果高位是1,则左边会以1补齐
10001001>>>2的结果是00100010它是无符号移位,无论高位是0还是1,它都会用0补齐,这好像是JAVA特有的运算符

在二进制表当中,最左边的位就是符号位它表示这个二进制数的正负,如果最左边的数是1,则表示这个数是负数,如果是0则表示这个数是正数.
你说的1>>>8结果就是0了,本来是的二进制表示是00000001,把它向右移0位,早就变成了00000000,当然就是0了

移位运算速度快,并且可以做标志位用,然后可以用掩码把它提取出来.


可惜不是你,陪我到最后
2007-04-03 09:26
hwj20070118
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2007-1-18
收藏
得分:0 
请问:10001001转换为十进制是多少.这个不太懂?
2007-04-03 14:15
hwj20070118
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2007-1-18
收藏
得分:0 
我只会8421码的转换.
2007-04-03 14:17
灵猴
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-4-3
收藏
得分:0 
>>属于位右移相当于除2取商.

如:13的2进制是1101右移高位补0还是1?

我总感觉移动后为1110何也?

又如:a=11010011,则a>>2=11110100总感觉位移后的数比a还大何谓取商?

希望各位指点迷津.

小弟在这多谢了.

别人笑我太疯癫, 我笑他人看不穿!
2007-04-03 15:00
快速回复:有关JAVA位运算的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014806 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved