Java操作應(yīng)用——奇數(shù)判斷
奇數(shù)可以被定義為被2整除余數(shù)為1的整數(shù)。表達(dá)式 num% 2 計(jì)算的是 num整除 2 時(shí)所產(chǎn)生的余數(shù),因此看起來這個(gè)程序應(yīng)該能夠正確運(yùn)轉(zhuǎn)。遺憾的是,它不能;它在四分之一的時(shí)間里返回的都是錯(cuò)誤的答案。
為什么是四分之一?因?yàn)樵谒械?int 數(shù)值中,有一半都是負(fù)數(shù),而 isOdd 方法對于對所有負(fù)奇數(shù)的判斷都會(huì)失敗。在任何負(fù)整數(shù)上調(diào)用該方法都回返回 false ,不管該整數(shù)是偶數(shù)還是奇數(shù)。
這是 Java 對取余操作符(%)的定義所產(chǎn)生的后果。該操作符被定義為對于所有的 int 數(shù)值 a 和所有的非零 int 數(shù)值b,都滿足下面的恒等式:
(a / b) * b + (a % b) == a
現(xiàn)在進(jìn)行修改如下:
使用此代碼,不僅是解決了奇數(shù)的負(fù)的問題,而且這個(gè)代碼也高度優(yōu)化。因?yàn)椋阈g(shù)和邏輯運(yùn)算的速度更快,比除法和乘法,結(jié)果取得了更快。
點(diǎn)擊加載更多評論>>