09 June, 2013

Bitwise 的各種運算

Standard

Code:

// ap8,Bitwise 的各種運算

public class ap8
{
  public static void main(String args[])
  {
    int i=13;
    int j=14;
    int k=i+j;
    short l=27;
    String x = "0000000000000000000000000000000000";
    String y = "1111111111111111111111111111111111";
    String z = "0101010101010100101010101010101010";
    String w = "1010101010101011010101010101010101";
    String pad = "--------------------------------";
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    z = Integer.toBinaryString(k);
    w = Integer.toBinaryString(l);
    
    System.out.println("變數值...");
    System.out.println("i = " + i + " ~i = " + ~i);
    System.out.println("j = " + j + " ~j = " + ~j);
    System.out.println("k = " + k + " ~k = " + ~k);
    System.out.println("l = " + l + " ~l = " + ~l);
    System.out.println("二進位數值輸出: 變數值...");
    System.out.println("i = " + x);
    System.out.println("j = " + y);
    System.out.println("k = " + z);
    System.out.println("l = " + w);
    x = Integer.toBinaryString(~i);
    y = Integer.toBinaryString(~j);
    z = Integer.toBinaryString(~k);
    w = Integer.toBinaryString(~l);
    System.out.println("~i = " + x);
    System.out.println("~j = " + y);
    System.out.println("~k = " + z);
    System.out.println("~l = " + w);
 System.out.println();
 
    System.out.println("位元運算...");
    System.out.println("i & j = " + (i & j));  // AND
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    z = Integer.toBinaryString(i & j);
    System.out.println("二進位數值輸出: AND...");
    System.out.println(x+'\n'+y+'\n'+pad+'\n'+z);
    System.out.println();
    
    System.out.println("i | j = " + (i | j));  // OR
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    z = Integer.toBinaryString(i | j);
    System.out.println("二進位數值輸出: OR...");
    System.out.println(x+'\n'+y+'\n'+pad+'\n'+z);
    System.out.println();
    
    System.out.println("i ^ j = " + (i ^ j));  // XOR
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    z = Integer.toBinaryString(i ^ j);
    System.out.println("二進位數值輸出: XOR...");
    System.out.println(x+'\n'+y+'\n'+pad+'\n'+z);
    System.out.println();
    
    System.out.println("~i + ~j = " + (~i+~j));  // 補數
    System.out.println("二進位數值輸出: NOT...");
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    System.out.println("~"+x+" + "+"~"+y+" = ");
    x = Integer.toBinaryString(~i);
    y = Integer.toBinaryString(~j);
    z = Integer.toBinaryString(~i + ~j);
    System.out.println(x+'\n'+y+'\n'+pad+'\n'+z);
    System.out.println();
    
    //System.out.println("l = i+j <<< 1 = " + (l<<<1));   // 無號數不能左移
    System.out.println("l = i+j >>> 1 = " + (l>>>1));     // 無號數/2
    System.out.println("二進位數值輸出: 無號數 >>> 1...");
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    System.out.println(x+" + "+y+" = ");
    x = Integer.toBinaryString(l);
    y = Integer.toBinaryString(l>>>1);
    System.out.println(x+" >>> 1"+'\n'+pad+'\n'+y);
    System.out.println();
    
    System.out.println("-(i+j) << 1 = " + (-(k)<<1));  // 有號數*2
    System.out.println("二進位數值輸出: 有號數 << 1...");
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    z = Integer.toBinaryString(i+j);
    System.out.println("-"+'('+x+" + "+y+')'+" = " +'-'+z);
    x = Integer.toBinaryString(-k);
    y = Integer.toBinaryString(-k<<1);
    System.out.println(x+" << 1"+'\n'+pad+'\n'+y);
    System.out.println();
    
    System.out.println("-(i+j) >> 1 = " + ((-k)>>1));  // 有號數/2
    System.out.println("二進位數值輸出: 有號數 >> 1...");
    x = Integer.toBinaryString(i);
    y = Integer.toBinaryString(j);
    z = Integer.toBinaryString(i+j);
    System.out.println("-"+'('+x+" + "+y+')'+" = "+'-'+z);
    x = Integer.toBinaryString(-k);
    y = Integer.toBinaryString(-k>>1);
    System.out.println(x+" >> 1"+'\n'+pad+'\n'+y);

    /* 001101 取 NOT => 110010(2補)
     * 110010-1=110001(1補)
     * 110001 再取 NOT => 001110(14),最後加上負號
     */
  }
}

Output:

變數值...
i = 13 ~i = -14
j = 14 ~j = -15
k = 27 ~k = -28
l = 27 ~l = -28
二進位數值輸出: 變數值...
i = 1101
j = 1110
k = 11011
l = 11011
~i = 11111111111111111111111111110010
~j = 11111111111111111111111111110001
~k = 11111111111111111111111111100100
~l = 11111111111111111111111111100100

位元運算...
i & j = 12
二進位數值輸出: AND...
1101
1110
--------------------------------
1100

i | j = 15
二進位數值輸出: OR...
1101
1110
--------------------------------
1111

i ^ j = 3
二進位數值輸出: XOR...
1101
1110
--------------------------------
11

~i + ~j = -29
二進位數值輸出: NOT...
~1101 + ~1110 =
11111111111111111111111111110010
11111111111111111111111111110001
--------------------------------
11111111111111111111111111100011

l = i+j >>> 1 = 13
二進位數值輸出: 無號數 >>> 1...
1101 + 1110 =
11011 >>> 1
--------------------------------
1101

-(i+j) << 1 = -54
二進位數值輸出: 有號數 << 1...
-(1101 + 1110) = -11011
11111111111111111111111111100101 << 1
--------------------------------
11111111111111111111111111001010

-(i+j) >> 1 = -14
二進位數值輸出: 有號數 >> 1...
-(1101 + 1110) = -11011
11111111111111111111111111100101 >> 1
--------------------------------
11111111111111111111111111110010
Press any key to continue...

Discuss:

運算式真假值

Standard

Code:

// ap7,運算式真假值

public class ap7
{
  public static void main(String args[])
  {
    int a=126;
    int b=-2*a;
    boolean c=true;
    boolean d=!c; //false
    
    System.out.println("a=" + a);
    System.out.println("b=-2*a=" + b);
    System.out.println("c=" + c);
    System.out.println("d=!c=" + d); 
    
    System.out.print("((a>b)?c:d)="+((a>b)?c:d)+"\n"); //true
    System.out.print("((ab)?d:c)+"\n"); //false
  }
}

Output:

a=126
b=-2*a=-252
c=true
d=!c=false
((a>b)?c:d)=true
((a<b)?c:d)=false
Press any key to continue...

Discuss:

運算式的型態轉換

Standard

Code:

// ap6,運算式的型態轉換

public class ap6
{
   public static void main(String args[])
   {
      short s=-5;
      int i=6;
      float f=9.67f;
      double d=976e-2; //9.76
     
   System.out.print("(short*integer)=");
   System.out.println((s*i));
   System.out.print("(double/float)=");
   System.out.println((d/f));
   System.out.print("(integer+float)=");
   System.out.println((i+f));
   System.out.print("(double/float)*(integer+float)=");
   System.out.println((d/f)*(i+f));
   System.out.println(" ");         
      System.out.print("(s*i)-(d/f)*(i+f)=");  // 印出結果
      System.out.println((s*i)-(d/f)*(i+f));
      
      /*
      ((short*integer)->short)=-30
      ((double/float)->double)=1.00930712750734
      ((integer+float)->double)=15.67
      ((double/float)*(integer+float)->double)=15.81584276504404
      
      ((s*i)-(d/f)*(i+f)->short-double=double)=-45.81584276504404
      */
   }
}

Output:

(short*integer)=-30
(double/float)=1.00930712750734
(integer+float)=15.67
(double/float)*(integer+float)=15.81584276504404

(s*i)-(d/f)*(i+f)=-45.81584276504404
Press any key to continue...

Discuss:

13 July, 2011

讓老師瘋掉的古詩答案

Standard
高考了,高考完後又是中考...考題千奇百怪,答卷也五花八門。真佩服現在的學生啊,思維跳脫,天馬行空,和我們那時候的循規蹈矩,差別太大了,呵呵。看一組語文試卷中的填空題----
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.有次考李清照的如夢令,「知否?知否?___________」同學答:SORRYI,DON'TKNOW...(正解為「應是綠肥紅瘦」)-

36.有次考魯迅先生某句:「___________,我以我血濺軒轅」同學答:他以他刀插我身-

37.語文考試,填空裡有一首革命詩:「為人進出的門緊鎖著,________________,一個聲音高喊著:_________________我渴望自由,但人的身軀怎能從狗洞子裡爬出…」同學答:為狗爬出的洞也鎖著/***的,都鎖著!-

38.千山萬水總是情,___________同學答:多給一分行不行(批卷老師對了一句:情是情,分是分,多給一分都不行)-

39.高一的時候,一次月考,上句「仰天大笑出門去,(正解)我輩豈是蓬蒿人」。班上有人寫:一不小心扭到腰。-

還有一句,上句:「清水出芙蓉,(正解)天然去雕飾」。有人寫,淤泥出蓮藕;還有人更絕,寫:亂世出英雄-

40.問君能有幾多愁,___________同學答:恰似一壺二鍋頭(老師批「你又喝多了……」)-

41._________________,不臨深溪,不知地之厚也;(我們班語文測驗我們好多男生一起寫「不坐飛機,不知天之高」!!!!)-

09 November, 2010

幽默的代碼註解

Standard
程序源代碼中的註釋經常是一個臥虎藏龍的地方,來看看這一輯國外某公司產品中的註釋。注意:看的時候嚴禁喝水或進食。


親愛的代碼維護人員:
當您嘗試優化這段代碼但發現這是一個極端錯誤的決定的時候,請修改下面的計時器,以便警示後人。
總計浪費在這段代碼的時間 = 16小時(喂~後面那個傻逼!)



真的很有問題(掛了再砍掉重練)



謹以此代碼獻給我的妻子達琳,感謝她一直支持我,還有我三個孩子和一隻狗。



神奇代碼,請勿改動(誰吃飽太閒去改常數?)



喝醉啦,遲些再弄



你可能會認為你讀得懂以下的代碼。但是你不會懂的,相信我吧。
要是你嘗試玩弄這段代碼的話,你將會在無盡的通宵中不斷地咒罵自己為什麼會認為自己聰明到可以優化這段代碼。
好了,現在請關閉這個文件去玩點別的吧。



程序員1(於2002年6月7日):在登陸界面臨時加入一些調試代碼
程序員2(於2007年5月22日):臨你個屁啊



反正這個辦法就修復了問題,我也不知道為什麼會這樣



要理解什麼是遞歸的話,請參考本文件的底部
(在文件的底部)
要理解什麼是遞歸的話,請參考本文件的頂部
(參考什麼阿?又不是 GNU is not Unix!)


雙龍入洞; //啊~~好痛(第一次被 2P?)



親愛的未來的我自己,請原諒我。
我有著難以表達的歉意。



我不對以下代碼負責。
是他們逼我寫的,是違背我意願的。



瘋了嗎?歡迎來到斯巴達。



要是你能修正這個問題的話,我會送給你兩個七十二歲的處女



沒有註釋留給你,難寫的代碼必定難讀



IE 瀏覽器的 Hack (在這裡先假設IE是瀏覽器)



有待修正。   修正什麼啊?



要是再讓我看到這種代碼,我會帶著槍來上班的



有只龍在這裡……(內有雷區請慎入)



在你閱讀以下代碼時,你要先搞懂為什麼我在這樣做。
我想讀取一個根節點下面所有的子節點,以便控制根節點不會顯示在選擇框上。但那個傻逼的DBA找了一些某些傻逼的藉口不讓我用索引去讀取這些數據,而要求我用他們傻逼的迭代器。所以有了以下代碼。



當我寫這段代碼的時候,只有老天和我自己知道我在做什麼。
現在,只剩老天知道了。