上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:
http://forums.sun.com/thread.jspa?threadID=5404590&start=0&tstart=0
LZ的贴子翻译如下:
大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊。比如把-12转成+12。是
的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法。非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个正确的
方向——比如使用一些数学库或是二进制方法什么的。谢谢!
这个贴子的沙发给出了答案:
n = -n;
LZ在四楼回复到:
我知道是个很简单的事,可我没有想到居然这么简单,我觉得你可能是对的。谢谢你。
过了一会,又回复到:
不开玩笑地说,我试了,真的没有问题耶!
看到这样的贴子,就能想到国内论坛上很多这样的“问弱智问题的贴子”,结果可能都会是比较惨!是的,国外的互联网文化和国内差不多,都是恶搞的人多于热心的人,呵呵。不过,国外的网民们有一点是好的,再恶搞也是就事搞事,不会有侮辱人的语言,这点真是值国内的人学习。
这本是一个平淡无奇的贴子,不过回复中那些恶搞的“解决方案”太强大了,在这里例举一下吧。
贴子的板凳给出了这样的答案(这是恶搞的开始)
1
2
3
4
5
6
7
8
9
10
|
int x = numberToInvertSign;
boolean pos = x > 0 ;
for ( int i = 0 ; i < 2 *Math.abs(x); i++){
if (pos){
numberToInvertSign--;
}
else {
numberToInvertSign++;
}
}
|
然后,有人说,n = -n 可以是可以,但不够晦涩,于是一个晦涩的解决方案出现了:
1
2
|
int n = ....;
n = ( 0xffffffff ^ n) + 1 ;
|
然后,又出现了一些看似简单,其实是比较晦涩的方案
1
|
<code>n = ~n + 1 ; </code>
|
1
|
<code><code>n = ~--n; </code></code>
|
继续,有才的人从来就不少:
1
2
3
4
5
6
7
|
<code><code>n^= 0xffffffff ;
int m;
for (m= 1 ; m != 0 && ((n&m) != 0 ); m<<= 1 );
n|= m;
if (m == 0 ) n= m;
else for (m >>= 1 ; m != 0 ; n^= m, m>>= 1 );
</code></code>
|
呵呵,开始越来越强大了,我以前也向大家介绍过《如何加密/弄乱C源代码》的文章,和这些恶搞的人可能有点相似吧。上面这个例子一出,大家都在讨论上面例子中的for循环语句,呵呵,很费解啊。
然后,后面几个就开始乱来了:
1
2
3
|
public int invert( int i) {
return i - (i + i);
}
|
1
2
3
4
5
6
7
|
switch (i)
{
case 1 : return - 1 ;
case 2 : return - 2 ;
case 3 : return - 3 ;
}
|
不过事情还没有结束,看看下面这个吧,OMG。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int absoluteValue( int num)
{
int max = 0 ;
for ( int i = 0 ; true ; ++i)
{
max = i > max ? i : max;
if (i == num)
{
if (i >= max)
return i;
return -i;
}
}
}
|
还有用字符串的解决方案:
1
2
3
4
5
6
7
8
9
10
11
|
public int invert( int n) {
String nStr = String.valueOf(n);
if (nStr.startsWith( "-" )) {
nStr = nStr.replace( "-" , "" );
} else {
nStr = "-" + nStr;
}
return Integer.parseInt(nStr);
}
|
别忘了面象对象,有最新Java支持的模板库:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
public interface Negatable<T extends Number> {
T value();
T negate();
}
public abstract class NegatableInteger implements Negatable<Integer> {
private final int value;
protected NegatableInteger( int value) {
this .value = value;
}
public static NegatableInteger createNegatableInteger( int value) {
if (value > 0 ) {
return new NegatablePositiveInteger(value);
}
else if (value == Integer.MIN_VALUE) {
throw new IllegalArgumentException( "cannot negate " + value);
}
else if (value < 0 ) {
return new NegatableNegativeInteger(value);
}
else {
return new NegatableZeroInteger(value);
}
}
public Integer value() {
return value;
}
public Integer negate() {
String negatedString = negateValueAsString ();
Integer negatedInteger = Integer.parseInt(negatedString);
return negatedInteger;
}
protected abstract String negateValueAsString ();
}
public class NegatablePositiveInteger extends NegatableInteger {
public NegatablePositiveInteger( int value) {
super (value);
}
protected String negateValueAsString () {
String valueAsString = String.valueOf (value());
return "-" + valueAsString;
}
}
public class NegatableNegativeInteger extends NegatableInteger {
public NegatableNegativeInteger ( int value) {
super (value);
}
protected String negateValueAsString () {
String valueAsString = String.valueOf (value());
return valueAsString.substring( 1 );
}
}
public class NegatableZeroInteger extends NegatableInteger {
public NegatableZeroInteger ( int value) {
super (value);
}
protected String negateValueAsString () {
return String.valueOf (value());
}
}
|
这个贴子基本上就是两页,好像不算太严重,如果你这样想的话,你就大错特错了。这个贴子被人转到了reddit.com,于是一发不可收拾,在上面的回贴达到了490多条。链接如下:
http://www.reddit.com/r/programming/comments/9egb6/programming_is_hard/
有人说,要用try catch;有人说要使用XML配置文件……,程序员们在追逐更为变态和疯狂的东西,并从中找到快乐,呵呵。
看完后,正如reddit.com所说——“编程好难啊”!
无独有偶,这并不是第一次,也不会是最后一次,让我们看看在PHP的官网上发生的类似的一幕——讨论PHP的abs取绝对值函数的函数说明文档中的回复:
http://us.php.net/manual/en/function.abs.php#58508
又是一个长贴,还带着很多性能分析,真的很好很强大!
(全文完)
分享到:
相关推荐
圣诞树给你,放桌面上哦^_^(3).exe
上个月做的情书加密系统... JAVA,JDK1.5及以上 支持对称及非对称的多种加解密方式,DES,AES,3DES和3种长度的RSA.可以加MAC和签名,不过这一部分做得不太好.GUI丑了...象征性地收1分吧,咱还没享受过收租的快感哪^_^
发圣诞树了给你,放桌上哦^_^(1) (1).exe
英语好好看啊^_^英语好好看啊^_^英语好好看啊^_^英语好好看啊^_^
你关不掉的^_^.html
寻找快乐_感受幸福^_^.ppt
我学习数字签名时绘制的一数字签名处理流程。^_^
读书笔记:从《Hotspot实战》一书中引出的想法^_^
qnxsdp-6.5.0-201007091524-win32 ^_^KEY.苏菲的世界哦i
电脑钢琴 惊喜地发现这个好东东,却发现没有破解版,很多键位不能发声,只好亲自动手,解除了这个限制,给大家分享一下^_^
20--[打地鼠^_+].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码20--[打地鼠^_+].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码20--[打地鼠^_+].zip源码scratch2.0 3.0编程项目源文件源码案例...
不含源码,源码请从右侧我的其他资源里下载,谢谢(*^_^*)
圣诞树给你,放桌面上哦^_^(1)(1)(1)(1)(1)(2)(1)(1)(1)(1).exe
win10下cuda11.1-cuda10.1 以及相应的cudnn包,被官网下载劝退的来^_^
idea快捷键
年份生肖速查 最基本的年分换算,可以引深为阿拉伯年份,佛历换算
MP4^_RM全能视频转换专家豪华版2008完美破解 完美支持超多种视频格式的互转互换,并专门支持手机、MP3\MP4、MP5等移动设备的视频格式。 破解简单,只需点击一次注册就马上成功。 好不容易找到的,希望各位用得满意...
护U使者(全能型U盘工具) V1.28 绿色版 功能齐全,能够很好的保护你的U盘,强烈推荐哦。
最好的MDK4.12版本,可用好用。Keil uVersion4值得下载。