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

徐晃
• 阅读 917

要求代码行数尽可能少;

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

}

可参考

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Stella981 Stella981
3年前
ASMSupport教程4.10 instanceof操作符生成
<pinstanceof是判断对象是否是某种类型的,我们可以看下下面的代码:</p<divid"scid:9D7513F9C04C4721824A2B34F0212519:4f2d1c23092c4b0f888f8ada43241043"class"wlWriterEditableSmartContent"style"flo
Stella981 Stella981
3年前
Kali Day01
1root@kali:~/文档arpspoofieth0t172.20.151.172.20.151.1234:64:a9:36:4:b70:0:0:0:0:0080642:arpreply172.20.151.1isat34:64:a9:36:4:b7334:64:a9:36:4
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Shell脚本应用(if语句的结构)
1、测试:检测表达式是否成立,成立则返回值为0,否则为非0方法:1)test 表达式2)【表达式】2、文件测试:\d:是否为目录\f:是否为文件\e:是否存在\r:是否有读取权限\w:是否有写入权限\x:是否有执行权限3、整数值比较:\eq:等于\ne:不等于\gt:大于\
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
达里尔 达里尔
1年前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数
清除某条会话的未读消息用engine.clearUnreadCount清除成功 code 是0 的情况下,重新拉取会话,还是未被清除的状态
确认调用清除未读数是否有传入时间戳确认时间戳是否为0,传入时间不可为0确认清除时间是否大于最新时间,不可传入大于当前时间的时间戳确认传入的时间是否大于要被清除的时间的senttime确认传入的时间是否是毫秒单位如果需要传入最新时间可以获取手机时候后根据SD
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
深度学习 深度学习
5天前
双指针法解决力扣922题:按奇偶排序数组II的完整指南
一、问题理解题目要求将一个重新,使得:1.所有偶数位于偶数位置(索引0,2,4...)1.所有奇数位于奇数索引位置(索引1,3,5...)1.不要求数字本身的排序,只需满足奇偶位置正确二、解法思路采用,分别维护两个:even指针:负责扫描偶数索引位置odd