`
mikehuhu
  • 浏览: 11659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

转个文章,真是心有多广,就有多扯

阅读更多

原帖在这里看到 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文章转换为markdown格式

    在压缩包中,有两个文件:“csdn.exe”和“csdn.py”。"csdn.exe"很可能是该工具的可执行文件,适用于Windows操作系统,用户可以直接运行。而"csdn.py"则可能为Python源代码文件,它是实现文章抓取和转换的核心部分...

    cdsn文章下载,转化为md格式

    4. **自动化处理**: 这个工具可能实现了自动化处理,可以批量下载和转换CDSN上的多篇文章,节省了手动操作的时间和精力。 5. **项目构建工具**: 从`pom.xml`文件来看,项目使用了Maven进行构建和依赖管理,这是Java...

    CSDN文章转PDF.exe

    可以获取不是vip的文章内容并保存下来,没有侧面的广告,适合保存下来后再ipad,手机中学习。方便了日常的学习生产,有BUG可以留言,到时候改进一下。

    一对多虚拟串口

    这样,一个物理串口就可以像多个独立的串口一样工作,实现并行通信。 2. **应用领域** - **设备仿真**:在测试和开发阶段,可能需要模拟多个串口设备来验证系统的串口通信功能。 - **数据分发**:在一个系统中,...

    用STM32F103C8t6输出多路PWM信号控制多路舵机(标准库)

    使用stm32控制时,经常要用到舵机,如使某个部位转到特定的角度,甚至需要同时控制多路的舵机执行不同的转动操作,这篇文章将以stm32F103C8T6为例,用STM32F103C8t6输出多路PWM信号,控制多路舵机转动。本文件使用...

    一个文章关键词提取工具

    这款名为"文章关键词提取工具"的软件显然聚焦于这一功能,其20100202版本可能代表了该软件的一个特定更新或迭代。 该工具的核心在于它的“关键词高速匹配算法”。这种算法可能基于多种技术,如TF-IDF(词频-逆文档...

    动态文章发布系统

    如果您像在您的主页上放上您喜欢的文章,那么需要一个一个链接的做。如果您删除了某篇文章或者想添加某篇文章,那么需要做很多改动,牵一发而动全身。 凌科文章动态发布系统就是为你解决这个问题而开发的软件。...

    seo文章采集器

    而文章不可能每天都自己写,要想把网站在百度搜索排名靠前,做SEO的人都知道原创文章是最不能缺少的一部分,而人工来写又太浪费时间,于是就有软件高手写出文章采集软件!这为seoer省下不少时间呀!这个软件是通过...

    C++学习指南 这篇文章真是太经典了.docx

    C++学习指南 这篇文章真是太经典了.docx

    简单的php文章发布系统

    通常,一个文章发布系统会包含至少两个表:用户表(如users)和文章表(如posts)。用户表存储用户信息,如用户名、密码(一般需要加密存储)、邮箱等。文章表则包括文章ID、作者ID(与用户表关联)、文章标题、内容...

    端梁单拉杆式牵引车体相对于转向架转心偏移研究.pdf

    当车辆通过曲线时,车体会同时围绕两个不同的旋转中心——转向架两轮对中心点A和牵引点C旋转,实际的转心B偏离了理想位置A,向C点偏移。此外,二系簧的位置也相对于A点有所偏移,其目的是平衡转向架各轮重和轴重的...

    大数据告诉你,什么样的文章能获得疯转!

    社交媒体追踪服务分析工具BuzzSumo,2014年5月前后对社交媒体上超过1亿篇文章进行了分析,试图找出一个答案:这个大问题又内含或细分为一些小问题:◆那些获得疯转的文章,激起了用户哪种情绪?◆清单?图表?哪类...

    文章相似度匹配算法

    通过计算两篇或多篇文章之间的相似度,可以帮助我们快速地识别出重复内容、剽窃行为或是相似主题的文章。本文将详细介绍一种基于关键词提取的文章相似度匹配算法,并探讨其设计思路与实施过程中的关键点。 #### 二...

    文章相似度判断--判断论文是否抄袭的系统

    在IT行业中,文章相似度判断是一项重要的技术,尤其在学术界和出版领域,用于检测论文的原创性。本文将深入探讨“文章相似度判断——判断论文是否抄袭的系统”,该系统采用C语言实现,旨在计算两篇文章之间的相似度...

    文章自动生成工具(win7 32)

    它能“自动批量生成文章”,这意味着用户无需手动编写每一篇文章,只需要设定好参数,如关键词、文章长度等,软件就能一次性生成多篇文章。同时,“几分钟时间可以生成几万篇高质量的文章”显示了这款工具的高效性,...

    动易ACCESS转成SQL数据库后发表文章时出现问号!!

    动易ACCESS转成SQL数据库后发表文章时出现问号!! 但如果登陆后台先随意编辑一篇文章后 再添加新文章却是正常的这是什么原因?

    文章采集器 SEO必备

    文件列表中的"WebText.exe"可能是一个文章采集器的应用程序文件,用户可以通过运行这个可执行文件启动采集器软件。"readme.txt"通常是软件的使用说明或注意事项,用户在使用前应该查阅此文件,以了解软件的正确操作...

    博客文章下载导出工具

    新浪、百度、和讯、网易、搜狐、凤凰、39健康博客、天涯、摇篮网、CSDN、ChinaUnix、中国教育服务平台(成长博客)、博客园、51cto、歪酷博客、草根博客等等,如果还有较多用户需要增加支持某个博客,也会更新的。...

    txt转换mobi工具

    通过这个工具,用户可以一次性处理多个TXT文件,极大地提高了效率。 2. **操作流程**:使用该工具的过程相对简单。首先,你需要在电脑上找到存放TXT文件的目录,然后通过软件界面添加文件或选择整个文件夹。一旦...

Global site tag (gtag.js) - Google Analytics