#!/usr/bin/env perl
use strict;
use warnings;
my @lines;
while (<DATA>) {
next if ( m/====/ and not m/TOTAL/ );
push @lines, $_;
}
print $_ for @lines;
__DATA__
========
Line 1
dfa====dsfdas==
Line 2
df as TOTAL ============
输出:
shiftwise示例A = 1195984440
shiftwise示例B = 5136714056324874240
===
输出:
shiftwise示例A = 5136714056324874240
shiftwise示例B = 5136714056324874240
答案 0 :(得分:4)
如果您未指定L
后缀,则常量字面值将被视为int
,§15.19 of the Java Language Specification中的此文字适用:
如果左侧操作数的提升类型为
int
,则只使用右侧操作数的五个最低位作为移位距离。就好像右手操作数受到带有掩码值&
(0x1f
)的按位逻辑AND运算符0b11111
(§15.22.1)的影响。因此,实际使用的移动距离始终在0
到31
的范围内,包括在内。
因此,您的32位左移将转换为零位的移位,即无变化。
答案 1 :(得分:1)
该值被认为是一个int,可以这样模拟:
public static void main(String[] args) {
System.out.println("shiftwise Example A = " + (0x47494638 << 32));
int someNumber = 0x47494638;
long otherNumber = someNumber << 32;
System.out.println("shiftwise Example B = " + otherNumber);
}
<强>输出:强>
shiftwise示例A = 1195984440
shiftwise示例B = 1195984440