关于Java的位运算。。新手求解。。

[复制链接]
查看11 | 回复3 | 2010-9-28 08:06:58 | 显示全部楼层 |阅读模式
00001111>>2的运算时先把00001111转换成二进制1001001001在右移2位得到10010010么?
还有11000011>>2是怎么运算的呢?求详细过程
我的意思是为什么00001111>>2打印出来的的值为146。。而11000011>>2打印出来的值为2750002。。

回复

使用道具 举报

千问 | 2010-9-28 08:06:58 | 显示全部楼层
右移运算符 右移运算符>>使指定值的所有位都右移规定的次数。它的通用格式如下所示: value >> num 这里,num 指定要移位值value 移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。下面的程序片段将值32右移2次,将结果8赋给变量a: int a = 32; a = a >> 2; // a now contains 8 当值中的某些位被“移出”时,这些位的值将丢弃。例如,下面的程序片段将35右移2 次,它的2个低位被移出丢弃,也将结果8赋给变量a: int a = 35; a = a >> 2; // a still contains 8 用二进制表示该过程可以更清楚地看到程序的
回复

使用道具 举报

千问 | 2010-9-28 08:06:58 | 显示全部楼层
不是的,java中以0开头的纯数字字符串被认为是八进制的。所以00001111 会转成八进制的整型右移运算我是这样理解的,右移N位即除于2的N次方所以
11000011>>2 应该是11000011转成十进制后除于4所得到的值
回复

使用道具 举报

千问 | 2010-9-28 08:06:58 | 显示全部楼层
所谓的无符号右移是不考虑最高位,也就是符号位的影响,直接将二进制的数字向右移动,高位不零。如00001111>>2,向右移动两位000011,然后高位差两位补零,即00000011。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行