要求代码行数尽可能少;
package mainimport ( "fmt" "strconv")func main(){ fmt.Printf("传入的值是否为奇数:%t\n",Judge_is_even(7))}func Judge_is_even(num int) bool { //fmt.Println(num % 2) rs, _ := strconv.ParseBool(strconv.Itoa(num % 2)) return rs}
num % 2
,值为0时即无余数,为偶数;值为1时即余1,为奇数;
Go中泛int型无奈间接转换为bool类型,须要先转成string..再由string转为bool
要求性能尽可能高:
思考实质,用位运算.
一个整数,无论占1个Byte还是2个或4个,即无论能表征2的8次方多的整数,亦或是2的16次方或2的32次方多,但在二进制转十进制中,其最初一个坑位都是X*
2的0次方即X(X为0或1),而其下面几位为0或1乘以2的1-n次方,必为偶数,故而最初一位X为0或1,即决定了整个整数的奇偶:如果为0,最初一位值为0*
2的0次方=0*
1=0,为偶数;如果为1,则为1*
1=1,为奇数;
"计算机中的数字通常用二进制补码示意——
如果为负数,补码与原码雷同,间接看最初一位(因为数字1的后面N位均为0,跟它做与运算,后面必定为0),奇数为1,偶数为0,与1相与,后果不变。
如果为正数,补码转原码:放弃符号位不动,其它各位取反+1,即为正数的绝对值原码全副取反+1。还是看最初1位,先取反,再+1,后果还是和原来雷同。进行与运算时还是原来的末位,所以用跟1做与运算还是放弃原来的后果。"
奇数的二进制数的最初一位永远是 1,与 1 按位且只会失去 1,偶数相同。
package mainimport ( "fmt" "strconv")func main() { fmt.Printf("传入的值是否为奇数:%t\n", Judge_is_even(81))}func Judge_is_even(num int) bool { rs, _ := strconv.ParseBool(strconv.Itoa(num & 1)) return rs}
可参考
本文由mdnice多平台公布