2009年12月31日

[C#] 算術運算子的先後順序

今天坎尼看到一題很詭異的題目
但老師說他不會解,只會用程式跑
所以坎尼就來試解一下 ^^

I. 題目

首先來看一下題目

請問上述四個列印值各為何?
前兩個應該不用講,有問題的應該是第三及第四個列印值
答案如下

II. 解法

糾竟~ 最後兩個值是怎麼運算的呢? 坎尼用中斷點及監看式一一道來

print 第一行之前,z = -1
但由於此處用 ++z => 先進行 z = z + 1 運算,再進行列印
得到列印值為 0,此時 z 也為 0

print 第二行之前,z 為 0
此處用 z-- => 先列印出值,再進行 z = z - 1 運算
列印值為 0,此時 z 的值為 -1

第三行,尚未進行運算之前,z 為 -1
但 z++ + z 的計算順序呢?
(可以看到 visual studio 很貼心的把計算式排過,題目上是 z+++z )
依執行先後,可以把式子看成 (z++) + z
在這邊 z++ 後面因為還有運算式,所以程式就先進行 z = z + 1 的動作 => 得到 z = 0
接著再去加後面的 z => -1 + 0 = -1
得到列印值 = -1 , z = 0

最後一行, z + z++,此時 z = 0
由於 z++ 後面沒有式子,所以先做完 0 + 0 之後直接列印,再進行 z = z + 1
得到列印值為 0,z = 1

III. 小結

這是西元 2009 年的最後一篇 blog 文,再數十分鐘就是 2010 年的到來 (in Taiwan)
Tim 在半年前跑去準備研究所考試
坎尼也因工作忙碌+怠惰使得今年文章產量比顯減少了很多 ^^" (汗

接下來新的一年,坎尼會盡量加油分享心得
向其他技術 blog 看齊 ^^

參考連結:MSDN ++ operator

2009年12月26日

[邏輯運算] 利用互斥進行兩數互換

今天坎尼去上課老師講了一題很有趣的題目
所以回到家坎尼就順手試驗了一下

I. XOR (exclusive OR)

XOR 是邏輯運算子之一,定義為:當兩數的值不同才為 true,相同則為 false
其他相關說明可以參考 維基百科:XOR

II. 程式

以往的做法會宣告一個 temp 變數來當互換的暫存
如果利用 XOR 寫法就變的非常簡單,只要三行就完成互換的動作
( ^ 為C#語法中的 XOR 運算子)
a = a ^ b;
b = a ^ b;
a = a ^ b;

程式執行結果

為什麼會這樣呢? 看了下面的數學推導公式就一目瞭然啦


主要是用到以下幾個特性:
  1. XOR 可交換
  2. 任何數 XOR 本身會得到 0
  3. 任何數 XOR 0 會得到本身
偷偷補充一個:任何數 XOR 1 會得到本身的補數

III. 小結

數學又令原本千篇一律的寫法開創了另一條路呢 ^^

參考網頁:
^ 運算子 (C# 參考)
維基百科:XOR

[Tips] 如何放大 Visual Studio 中的字型

有時候要 Demo 程式,但程式碼投影出來密密麻麻的該怎麼辦?
本篇就來解決這個煩人的問題

之前坎尼去參加研討會,胡百敬老師就說了一句「忘了先把字型調大」
沒想到祭司在 TechDays 就教了如何用巨集來調整字型大小
可參考 Joey 的 [修練營 ASP.NET]Visual Stuido Tips - 熱鍵使用巨集調整字型大小

但本篇要講的是,各位在 Visual Studio 2010 還有另一種選擇!!!!

按住 CTRL + 滾輪

是的,你沒看錯,就是和一般的瀏覽器一樣
按住 Ctrl 鍵再用滑鼠滾輪上下滾即可放大縮小字型
也沒有巨集啟動時的延遲時間等副作用

只能說,帥啊老皮!

[Tips] 匯入 ItemTemplate 到其他機器上

上一篇 中坎尼介紹了如何匯出 ItemTemplate
本篇將介紹如何把 ItemTemplate 搬到其他機器上去

I. 匯入 ItemTemplate

話說坎尼小時候發現可以匯出 Template
心想「哇,這東西不得了啊,快分享給同事」就很開心的做了很多共通的頁面
但換到另一台機器時才發現...怎麼 Visual Studio 沒有匯入的選項?
所以年輕可愛的坎尼就笨笨地在另一台機器重新把 Source Code 貼上再匯出

一定要這樣才能匯入嗎? 那要匯出的功能幹嘛?
這個自然,只出不進非強調人性化的 Visual Studio 作為
坎尼找到許久,總算是找到了簡單的方法

II. 上一節廢話太多,真的要講如何匯入啦

首先,開啟 Visual Studio (2005、2008、2010)
選擇 Tools -> Options 

 找到 Projects And Solutions 
右邊的內容頁分別可以看到 User Project Templates Location 
User Item Templates Location
這兩個實體路徑就是 Templates 的讀取路徑

 此時只要簡單的把匯出的 .zip 檔,放到路徑下即可

 雖然沒有 UI 的匯入選項,但也是比手動複製 Code 好上許多

III. 新增的 Webform Item 怎麼會建置出錯?

其實這個問題印象中是 vs 2008 以後才出現的
建立好項目之後,無法直接進行建置的原因在於 .designer.cs


可以看到,雖然 .aspx.cs 的 Class 名稱已經改過,但 .designer.cs 卻沒有

要修正此項問題很簡單,首先把 Template 的檔案解壓縮,出現了五個檔案


把 aspx.cs 和 designer.cs 打開比較一下




可以發現 designer.cs 的 Class 名稱並未被修改
從aspx.cs那邊抄來的 $safeitemname$ 取代後存檔
再將檔案壓縮成 .zip 即可 (壓縮檔變小了?!)



馬上新增個新頁面看看,designer.cs 的 Class 總算是一樣了




IV. 小結

第三小節提的這個問題,目前在 vs2010 中仍出現若有匯出 Template 需求的讀者,可以依上列的方式修改
如果有人知道 Visual Studio 哪邊可以用 UI 匯入,也歡迎留言 ^^

2009年12月25日

[Tips] ItemTemplate 讓你省去 copy/paste 的時間

今天來聊一下怎麼用 ItemTemplate
其中包含了如何匯出及匯入

I. 什麼是 ItemTemplate?

其實說到這個東西,visual studio 2005 時早已支援
(vs 2003 由於年代太久遠,目前無法考證)

其目的在於讓工廠型的頁面,直接匯出成 Template
使重覆性高的頁面無需再到處貼 code,增加工程師的產量及效率

II. 如何製作 Template?

其實很簡單,只要先製作好要量產的頁面
再點選 File -> ExportTemplate,跟著指示走即可

首先,製作好 Item




接著選 File -> ExportTemplate

接著可以看到有 Project Template Item Template 的選項 
(本次範例是介紹 Item Template)


也可以選擇和這個頁面有相依的參考

再輸入相關資訊及設定顯示的 Icon 選擇完成即可
這邊可以勾選匯出時自動匯入到本機 Visual Studio


完成後去新增項目的地方,即會看到剛剛匯入的樣板


點選新增會出現提示,如果是來歷不明的樣板,建議還是先打開原始檔看一下


登登,建立成功!!! 連基本的 Source Code 也建立完成


III. 小結

ItemTemplate 對要大量生產同類型的 Code Page 很好用
和 ClassLibrary、CustomControl 有異曲同工之妙
要是三個一起用,這豈不飛天啦?!

由於本篇抓的圖太多
容待坎尼下一篇再介紹如何把 ItemTemplate 匯入到其他機器上 :D

下一篇:[Tips] 匯入 ItemTemplate 到其他機器上

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D