怎样判断一个数是否为偶数

要求代码行数尽可能少;

复制代码
package main

import (
 "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 main

import (
 "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

}

可参考[1]

参考资料

1

可参考: https://learnku.com/articles/10153/odd-even-number-judgment-by-bit-operation

本文由mdnice多平台发布

相关推荐
吴文周4 小时前
告别重复劳动:一套插件让 AI 替你写代码、修Bug、做测试、上生产
前端·后端·ai编程
Cyeam4 小时前
Roadbook CSV:一行 CSV 秒变高德地图路书
后端·开源·aigc
懒狗小前端5 小时前
做了一个 codex 的中文文档网站,做的不好可以随便喷
前端·后端
Eric_见嘉7 小时前
在职前端 Agent 配置分享
前端·后端·agent
Ares-Wang7 小时前
Flask》》 Flask-OpenID 认证、 OpenID Connect (OIDC)
后端·python·flask
掘金码甲哥7 小时前
这篇优雅安装k8s集群的姿势,请务必投喂给AI智能体, 包装包活的那种!
后端
IT_陈寒9 小时前
Vue的v-for里用index当key,我被自己坑惨了
前端·人工智能·后端
invicinble9 小时前
Spring如何把bean注册到容器里
java·后端·spring
阿丰资源9 小时前
基于SpringBoot+MySQL的网上订餐系统(附源码)
spring boot·后端·mysql
希望永不加班9 小时前
SpringBoot 敏感数据脱敏(序列化层)
java·spring boot·后端·spring