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

要求代码行数尽可能少:

go 复制代码
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,偶数相反。

go 复制代码
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

}

可参考

相关推荐
GISer_Jing5 分钟前
如何学习Agent
后端·langchain
JWASX1 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析
LabVIEW开发1 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
量化分析码农2 小时前
【Python量化波动率实战 01】波动率是怎么算的:年化、滚动与区间估计一次讲清
后端
特立独行的猫A2 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
金銀銅鐵2 小时前
从一个类名到一张类图:用反射自动生成 PlantUML
java·后端·uml
严肃小白兔3 小时前
MATLAB 数值计算中的精度与误差问题:浮点运算、误差传播与数值稳定性
人工智能·算法·matlab
追逐时光者3 小时前
一款基于 .NET 开源、免费的数据库自治诊断平台
后端·.net
追逐时光者3 小时前
让 GitHub Copilot 更懂你的 .NET 代码风格:一份精简实用的 Copilot Instructions
后端·.net
青少儿编程课堂4 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛