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

要求代码行数尽可能少;

复制代码
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多平台发布

相关推荐
千|寻18 分钟前
【画江湖】langchain4j - Java1.8下spring boot集成ollama调用本地大模型之问道系列(第一问)
java·spring boot·后端·langchain
程序员岳焱31 分钟前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
龚思凯37 分钟前
Node.js 模块导入语法变革全解析
后端·node.js
天行健的回响40 分钟前
枚举在实际开发中的使用小Tips
后端
wuhunyu1 小时前
基于 langchain4j 的简易 RAG
后端
techzhi1 小时前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端
写bug写bug2 小时前
手把手教你使用JConsole
java·后端·程序员
苏三说技术2 小时前
给你1亿的Redis key,如何高效统计?
后端
JohnYan2 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
程序员清风3 小时前
阿里二面:Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 有什么影响?
java·后端·面试