VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 539|回复: 12

[原创] C++无符号int类型的位操作函数封装

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-1-8 18:04:41 | 显示全部楼层 |阅读模式
最近的游戏项目结构越来越大,状态也越来越多。于是想把多种状态用一个无符号的int整型的不同二进制位来表示,这样既节省空间,保存数据库的时候也方便,就一个值。其他也有很多地方都用到了这种方法。刚开始每个地方为了实现这个功能都要一顿左移右移的,发现很多都是重复代码,于是封装了2个位操作的函数,使用起来很方便哦!这里分享给大家,希望对大家有帮助!

typedef unsigned int uint_t

void bit_set(uint_t& num, uint_t pos, uint_t flag);
函数说明:bit_set 顾名思义,就是对某个二进制位进行设置。参数 num 是一个 uint_t 类型的引用,即是源操作数,进行二进制位的设置都是基于这个数来设置的,会改变他的值。
参数 pos 是指哪一位?要对 num 参数的哪一位进行操作,第1位,还是第2位,等等,范围是 0~31。最后一个参数 flag 就是要对该位进行设置的值,当然他只有2种选择,0 或者 1。

使用代码示例:
  1. uint_t num = 2;
  2. bit_set(num, 0, 1);
复制代码


bool bit_get(uint_t num, uint_t pos);
函数说明:bit_get 顾名思义,就是获取某个数的某一二进制位的值,如果该位是1,返回 true,该位是0,返回false。
num 是源操作数,pos 就是要获取第几位的值?

使用代码示例:
  1. uint_t num = 2;
  2. bool bit_value = bit_get(num, 1);
复制代码


源码回复后可见!

游客,如果您要查看本帖隐藏内容请回复

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

09_avatar_middle
online_vip wangxiaohu104 发表于 2018-1-9 15:29:26 | 显示全部楼层
学习下,平常也经常用int 表示状态

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

77_avatar_middle
online_vip Health 发表于 2018-1-9 15:41:29 | 显示全部楼层
我也看下,多谢老大分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

13_avatar_middle
online_vip fly12300 发表于 2018-1-9 16:55:31 来自手机 | 显示全部楼层
看看源码,

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

01_avatar_middle
online_vip zjmttt 发表于 2018-1-10 09:26:16 | 显示全部楼层
看看,是不是和我的方法一样

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

06_avatar_middle
online_member angeltony 发表于 2018-1-10 12:59:52 | 显示全部楼层
学习下,平常也经常用int 表示状态

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

83_avatar_middle
online_vip 5989041a 发表于 2018-1-10 13:57:47 | 显示全部楼层
我也看下,多谢老大分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

92_avatar_middle
online_member a灬魂淡 发表于 2018-1-11 09:39:52 | 显示全部楼层
看看大佬的思路

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

09_avatar_middle
online_vip jtl996 发表于 2018-1-13 09:43:03 来自手机 | 显示全部楼层
看看还要长度八个

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
online_member besteast 发表于 2018-1-14 18:52:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

92_avatar_middle
online_member ya2018 发表于 2018-1-23 12:48:51 | 显示全部楼层
楼主  赞一个

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

02_avatar_middle
online_member 咚咚2015 发表于 2018-1-23 12:49:24 | 显示全部楼层
楼主  赞一个

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-6-26 01:11

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表