C和Java中的移位运算

在很多语言(如:C和Java)中都提供了移位运算,它包括:左移运算和右移运算两种。
其中,左移运算(<<)比较简单和固定,X向左移k位,即是丢弃最左端的k位,并在右端补k个0。
而右移运算有两种类型,一种是叫逻辑右移,另一种是算术右移。X右移k位这个操作,在逻辑右移中,为舍弃最右端的k位,并在左端补k个0,而在算术右移中,它表示为在左端补k个最高有效位的值(可能是0也可能是1)。
在C语言中,右移运算统一表示为 X>>k,C语言标准没有明确定义应该使用哪种类型的右移。对于无符号数据,右移必须是逻辑右移。而对于有符号数据,算术右移和逻辑右移都可以。实际上,在多数的编译器和及处理器架构的组合中,对有符号数据使用算术右移。
在Java语言中,对两种右移类型有不同的表示,表达式X>>k表示将X算术右移k位,而X>>>k表示将X逻辑右移k位。
注:在IA架构下,左端表示高位,而右端表示低位。
分别写了下面两个C和Java的小程序来看右移运算。

C语言代码如下:

运行结果为:

Java程序:

运算结果为:

以上代码在Intel平台的Linux环境上运行的。

master

Stay hungry, stay foolish.

发表评论

电子邮件地址不会被公开。 必填项已用*标注