tag:blogger.com,1999:blog-8273926976116880385.post3105761179192931512..comments2023-10-10T21:43:59.868+08:00Comments on 猛哥的軌跡: 判斷n是否為2的冪次wafthttp://www.blogger.com/profile/05053941101229353830noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-8273926976116880385.post-23450830653624592382013-01-23T00:44:48.235+08:002013-01-23T00:44:48.235+08:00上色的部分我測試後,網頁上一次不能貼太多,要分批貼上色的部分我測試後,網頁上一次不能貼太多,要分批貼UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-42428437925781517162013-01-21T23:54:11.377+08:002013-01-21T23:54:11.377+08:00哈哈 打太快 沒注意到 是我打錯啦 :P哈哈 打太快 沒注意到 是我打錯啦 :PUBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-46864646684074292242013-01-21T21:54:38.805+08:002013-01-21T21:54:38.805+08:00n = n<0 ? -n : n ;
這邊要把?改成:嗎
還是兩個問號是新用法n = n<0 ? -n : n ;<br />這邊要把?改成:嗎<br />還是兩個問號是新用法wafthttps://www.blogger.com/profile/05053941101229353830noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-66147198652021029982013-01-19T15:23:26.436+08:002013-01-19T15:23:26.436+08:000.0 好像不能修改 博主的文章
似乎只能觀看,我再確認看看0.0 好像不能修改 博主的文章<br />似乎只能觀看,我再確認看看UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-78477256479454467342013-01-19T15:21:36.806+08:002013-01-19T15:21:36.806+08:00只能說 Quake 創造者 John D. Carmack
真不是人,我偷懶的話當然寫
n = n...只能說 Quake 創造者 John D. Carmack<br />真不是人,我偷懶的話當然寫<br /><br />n = n<0 ? -n ? n ;<br />return (n!=0 && (n&(n-1)==0));<br /><br />寫 C版 不是也很好嗎~~~~ 0.0b<br /><br />Carmack 那個年代電腦並不是很快<br />像 or eax, 1 其實用 dec eax 也可以<br />可是聰明的地方就在於他注意到了 反正上面<br />一定要 0 才走這一步,所以用 1-bit 邏輯加法 OR<br />直接搞定。像 js 直接判斷SF旗標跳躍也是抄捷徑UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-77098201483735209822013-01-19T15:14:49.063+08:002013-01-19T15:14:49.063+08:00其實你自己可以改 反正都有權限其實你自己可以改 反正都有權限wafthttps://www.blogger.com/profile/05053941101229353830noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-10624221796273030562013-01-19T15:10:20.414+08:002013-01-19T15:10:20.414+08:00ㄎㄎ 夜風 可以改一下這篇專欄 把我下面
打一堆 整併到你這篇 這樣看起來 就很豐富啦
囧 回文裡面...ㄎㄎ 夜風 可以改一下這篇專欄 把我下面<br />打一堆 整併到你這篇 這樣看起來 就很豐富啦<br />囧 回文裡面 程式碼無法上色 好醜UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-81749091726913537492013-01-19T15:03:33.483+08:002013-01-19T15:03:33.483+08:00為什麼說他是變種版
因為他多判斷負號的功能
你輸入 256 或 -256 都可以 為什麼說他是變種版<br />因為他多判斷負號的功能<br />你輸入 256 或 -256 都可以 UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-14458744628001794652013-01-19T15:01:39.365+08:002013-01-19T15:01:39.365+08:00我註解忘了改了
抓出 x 放在 eax 要改成
抓出 num 放在 eax我註解忘了改了 <br /><br />抓出 x 放在 eax 要改成<br /><br />抓出 num 放在 eaxUBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-56794598005868358842013-01-19T15:00:00.503+08:002013-01-19T15:00:00.503+08:00include 裡面要 stdio.h
不知道為什麼有角號
在網頁上會顯示不出來
0.0 ~~include 裡面要 stdio.h<br />不知道為什麼有角號 <br />在網頁上會顯示不出來<br />0.0 ~~UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-54079191396289920312013-01-19T14:58:56.968+08:002013-01-19T14:58:56.968+08:00作者已經移除這則留言。UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.comtag:blogger.com,1999:blog-8273926976116880385.post-9114900441403794602013-01-19T14:58:06.060+08:002013-01-19T14:58:06.060+08:00我雖然不知道起源,不過這條運算式是很有名的
"Optimized way to check...我雖然不知道起源,不過這條運算式是很有名的<br />"Optimized way to check 2 power " algorithm<br />我最早在 Quake 1 的原始碼裡面有看過,不過我看到的<br />是嵌入式組語變種版,有興趣 夜風可以開 VC 玩玩看 結果是一樣的喔,這會用組語的原因裡面有很多 手動最佳化的細節,例如 加 1 使用 or eax, 1 用邏輯方法達成,反正夜風 看看源始碼就懂了<br /><br />原版的 Chk2Power 的註解是英文版<br /><br />#include<br /><br />__declspec(naked) int __stdcall Chk2Power(int num)<br />{<br /> __asm pop ecx ; 先將保存好返回位址<br /> __asm pop eax ; 抓出 x 放在 eax<br /> <br /> __asm cmp eax, 0 ; 因為 CPU 於暫存器內部比較速度快<br /> __asm jz iszero ; 假如 ZF=0 則跳躍離開<br /> __asm js isneg ; 假如 SF=0 則跳躍翻正<br /> __asm jmp chk ; 正數直接跳至判斷區域<br />isneg:<br /> __asm neg eax ; 翻正<br />chk:<br /> __asm mov edx, eax ; eax 扣1前先偷偷放到 edx<br /> __asm dec eax ; 用扣1專用指令 dec<br /> __asm and eax, edx ; 計算 Bitwise AND<br /> __asm cmp eax, 0 ; 等於零嗎 ?<br /> __asm jnz iszero ; 假如否, 則跳躍至 iszero 回傳零<br /> __asm or eax, 1 ; 加 1<br /> <br /> __asm push ecx ; 回存返回位址<br /> __asm ret ; 返回<br />iszero:<br /> __asm xor eax, eax ; 設定 eax = 0<br /> __asm push ecx ; 回存返回位址<br /> __asm ret ; 返回<br />}<br /><br />int main(int argc,char* argv[])<br />{<br /> printf("%x", Chk2Power( atol(argv[1]) ) );<br /> return 0;<br />}<br />UBIWUhttps://www.blogger.com/profile/12866156630814680545noreply@blogger.com