原帖在这里看到 http://coolshell.cn/?p=1391,下面这个还没有看懂,呵呵~
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);
以下是原帖内容:
******************************************************
上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:
http://forums.sun.com/thread.jspa?threadID=5404590&start=0&tstart=0
LZ的贴子翻译如下:
写道
大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊。比如把-12转成+12。是的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法。非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个正确的方向——比如使用一些数学库或是二进制方法什么的。谢谢!
这个贴子的沙发给出了答案:
n = -n;
LZ在四楼回复到:
写道
我知道是个很简单的事,可我没有想到居然这么简单,我觉得你可能是对的。谢谢你。
过了一会,又回复到:
写道
不开玩笑地说,我试了,真的没有问题耶!
看到这样的贴子,就能想到国内论坛上很多这样的“问弱智问题的贴子”,结果可能都会是比较惨!是的,国外的互联网文化和国内差不多,都是恶搞的人多于热心的人,呵呵。不过,国外的网民们有一点是好的,再恶搞也是就事搞事,不会有侮辱人的语言,这点真是值国内的人学习。
这本是一个平淡无奇的贴子,不过回复中那些恶搞的“解决方案”太强大了,在这里例举一下吧。
贴子的板凳给出了这样的答案(这是恶搞的开始)
int x = numberToInvertSign;
boolean pos = x > 0;
for(int i = 0; i < 2*Math.abs(x); i++){
if(pos){
numberToInvertSign--;
} else{
numberToInvertSign++;
}
}
然后,有人说,n = -n 可以是可以,但不够晦涩,于是一个晦涩的解决方案出现了:
int n = ....;
n = (0xffffffff ^ n) + 1;
然后,又出现了一些看似简单,其实是比较晦涩的方案
n = ~n + 1;
n = ~--n;
继续,有才的人从来就不少:
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);
呵呵,开始越来越强大了,我以前也向大家介绍过《如何加密/弄乱C源代码》的文章,和这些恶搞的人可能有点相似吧。上面这个例子一出,大家都在讨论上面例子中的for循环语句,呵呵,很费解啊。
然后,后面几个就开始乱来了:
1 public int invert(int i) {
2 return i - (i + i);
3 }
1 switch (i)
2 {
3 case 1: return -1;
4 case 2: return -2;
5 case 3: return -3;
6 // ... etc, you get the proper pattern
7 }
不过事情还没有结束,看看下面这个吧,OMG。
01 int absoluteValue(int num)
02 {
03 int max = 0;
04 for(int i = 0; true; ++i)
05 {
06 max = i > max ? i : max;
07 if(i == num)
08 {
09 if(i >= max)
10 return i;
11 return -i;
12 }
13 }
14 }
还有用字符串的解决方案:
01 public int invert(int n) {
02 String nStr = String.valueOf(n);
03
04 if (nStr.startsWith("-")) {
05 nStr = nStr.replace("-", "");
06 } else {
07 nStr = "-" + nStr;
08 }
09
10 return Integer.parseInt(nStr);
11 }
别忘了面象对象,有最新Java支持的模板库:
01 public interface Negatable<T extends Number> {
02 T value();
03 T negate();
04 }
05
06
07
08 public abstract class NegatableInteger implements Negatable<Integer> {
09 private final int value;
10
11 protected NegatableInteger(int value) {
12 this.value = value;
13 }
14
15 public static NegatableInteger createNegatableInteger(int value) {
16 if (value > 0) {
17 return new NegatablePositiveInteger(value);
18 }
19 else if (value == Integer.MIN_VALUE) {
20 throw new IllegalArgumentException("cannot negate " + value);
21 }
22 else if (value < 0) {
23 return new NegatableNegativeInteger(value);
24 }
25 else {
26 return new NegatableZeroInteger(value);
27 }
28 }
29
30 public Integer value() {
31 return value;
32 }
33
34 public Integer negate() {
35 String negatedString = negateValueAsString ();
36 Integer negatedInteger = Integer.parseInt(negatedString);
37 return negatedInteger;
38 }
39
40 protected abstract String negateValueAsString ();
41 }
42
43
44
45 public class NegatablePositiveInteger extends NegatableInteger {
46 public NegatablePositiveInteger(int value) {
47 super(value);
48 }
49
50 protected String negateValueAsString () {
51 String valueAsString = String.valueOf (value());
52 return "-" + valueAsString;
53 }
54 }
55
56
57
58 public class NegatableNegativeInteger extends NegatableInteger {
59 public NegatableNegativeInteger (int value) {
60 super(value);
61 }
62
63 protected String negateValueAsString () {
64 String valueAsString = String.valueOf (value());
65 return valueAsString.substring(1);
66 }
67 }
68
69
70
71 public class NegatableZeroInteger extends NegatableInteger {
72 public NegatableZeroInteger (int value) {
73 super(value);
74 }
75
76 protected String negateValueAsString () {
77 return String.valueOf (value());
78 }
79 }
这个贴子基本上就是两页,好像不算太严重,如果你这样想的话,你就大错特错了。这个贴子被人转到了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
又是一个长贴,还带着很多性能分析,真的很好很强大!
分享到:
相关推荐
在压缩包中,有两个文件:“csdn.exe”和“csdn.py”。"csdn.exe"很可能是该工具的可执行文件,适用于Windows操作系统,用户可以直接运行。而"csdn.py"则可能为Python源代码文件,它是实现文章抓取和转换的核心部分...
4. **自动化处理**: 这个工具可能实现了自动化处理,可以批量下载和转换CDSN上的多篇文章,节省了手动操作的时间和精力。 5. **项目构建工具**: 从`pom.xml`文件来看,项目使用了Maven进行构建和依赖管理,这是Java...
这个网站支持全球140多种语言,用户只需要将文章的链接粘贴到网站上,选择文章的语言,稍等片刻,就可以生成一个mp3文件,让用户可以随时随地以音频形式阅读文章。总体来说,Article Audio是一个非常实用的在线文章...
可以获取不是vip的文章内容并保存下来,没有侧面的广告,适合保存下来后再ipad,手机中学习。方便了日常的学习生产,有BUG可以留言,到时候改进一下。
这样,一个物理串口就可以像多个独立的串口一样工作,实现并行通信。 2. **应用领域** - **设备仿真**:在测试和开发阶段,可能需要模拟多个串口设备来验证系统的串口通信功能。 - **数据分发**:在一个系统中,...
使用stm32控制时,经常要用到舵机,如使某个部位转到特定的角度,甚至需要同时控制多路的舵机执行不同的转动操作,这篇文章将以stm32F103C8T6为例,用STM32F103C8t6输出多路PWM信号,控制多路舵机转动。本文件使用...
而文章不可能每天都自己写,要想把网站在百度搜索排名靠前,做SEO的人都知道原创文章是最不能缺少的一部分,而人工来写又太浪费时间,于是就有软件高手写出文章采集软件!这为seoer省下不少时间呀!这个软件是通过...
C++学习指南 这篇文章真是太经典了.docx
在构建一个个人博客系统时,涉及的技术点和功能模块...通过以上分析,我们可以看出构建一个个人博客系统涉及到的技术面广且深入,需要综合运用前端开发、后端开发、数据库设计、网络安全、用户体验等多个领域的知识。
本项目“C#博客园多线程蜘蛛模式文章采集器”正是这样一个工具,它利用C#编程语言,结合多线程技术,实现对博客园网站上的文章进行自动化采集,并将采集到的文章保存为本地HTML格式,方便后续的数据分析和使用。...
在IT行业中,文章相似度判断是一项重要的技术,尤其在学术界和出版领域,用于检测论文的原创性。本文将深入探讨“文章相似度判断——判断论文是否抄袭的系统”,该系统采用C语言实现,旨在计算两篇文章之间的相似度...
总结,这个简单的文章网站源码是一个学习Web开发基础的好资源,涵盖了前端HTML/CSS/JS和后端编程、数据库设计以及安全优化等多个方面。通过分析和实践这个源码,你可以更好地理解网站开发的流程和技术,并为创建更...
它能“自动批量生成文章”,这意味着用户无需手动编写每一篇文章,只需要设定好参数,如关键词、文章长度等,软件就能一次性生成多篇文章。同时,“几分钟时间可以生成几万篇高质量的文章”显示了这款工具的高效性,...
动易ACCESS转成SQL数据库后发表文章时出现问号!! 但如果登陆后台先随意编辑一篇文章后 再添加新文章却是正常的这是什么原因?
新浪、百度、和讯、网易、搜狐、凤凰、39健康博客、天涯、摇篮网、CSDN、ChinaUnix、中国教育服务平台(成长博客)、博客园、51cto、歪酷博客、草根博客等等,如果还有较多用户需要增加支持某个博客,也会更新的。...
在这个主题中,我们将探讨如何使用Python编写一个简单的爬虫程序来抓取CSDN博客的文章内容。CSDN(Chinese Software Developer Network)是中国的一个大型程序员社区,其中包含大量的技术博客,是获取编程知识的重要...
"python-JSON转列表"文章问题相关数据
例如,假设有一个JSON对象,其中包含一个嵌套的对象数组,可以这样定义Java类: ```java public class OuterObject { private String someField; private List<InnerObject> innerObjects; // getters and ...