参考资料地址:
1、https://juejin.cn/post/6844903909333401607
2、https://www.jianshu.com/p/78a984173985
3、【精华】《位运算(位掩码BitMask)的简单应用场景浅析》 https://www.jianshu.com/p/78a984173985
位掩码示例:
import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Lists; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * Hello world! * */ public class App { public static void main(String[] args) { System.out.println(String.format("%2s:%s", Perms.READ, toBinaryStringFormat(Perms.READ))); System.out.println(String.format("%2s:%s", Perms.WRITE, toBinaryStringFormat(Perms.WRITE))); System.out.println(String.format("%2s:%s", Perms.CREATE, toBinaryStringFormat(Perms.CREATE))); System.out.println(String.format("%2s:%s", Perms.DELETE, toBinaryStringFormat(Perms.DELETE))); System.out.println(String.format("%2s:%s", Perms.ADMIN, toBinaryStringFormat(Perms.ADMIN))); System.out.println(String.format("%2s:%s", Perms.ALL, toBinaryStringFormat(Perms.ALL))); System.out.println(String.format("%2s:%s", Perms.DENY_ALL, toBinaryStringFormat(Perms.DENY_ALL))); System.out.println(String.format("%s", StringUtils.repeat("=", 100))); Perms p = new Perms(); p.setPermission(Perms.READ); System.out .println(String.format("%2s:%s", p.getPermission(), toBinaryStringFormat(p.getPermission()))); p.enable(Perms.WRITE | Perms.CREATE); System.out .println(String.format("%2s:%s", p.getPermission(), toBinaryStringFormat(p.getPermission()))); p.enable(Perms.ADMIN); System.out .println(String.format("%2s:%s", p.getPermission(), toBinaryStringFormat(p.getPermission()))); } public static String toBinaryStringFormat(int perm) { String string = StringUtils.leftPad(Integer.toBinaryString(perm), Integer.SIZE, '0'); List<List<String>> lists = Lists.partition(Arrays.asList(string.split("")), Byte.SIZE); return lists.stream().map(list -> { return String.join("", list); }).collect(Collectors.joining(" ")); } } class Perms { /** * 00000000 00000000 00000000 00000001 */ public static final int READ = 1 << 0; /** * 00000000 00000000 00000000 00000010 */ public static final int WRITE = 1 << 1; /** * 00000000 00000000 00000000 00000100 */ public static final int CREATE = 1 << 2; /** * 00000000 00000000 00000000 00001000 */ public static final int DELETE = 1 << 3; /** * 00000000 00000000 00000000 00010000 */ public static final int ADMIN = 1 << 4; /** * 00000000 00000000 00000000 00011111 */ public static final int ALL = READ | WRITE | CREATE | DELETE | ADMIN; public static final int DENY_ALL = READ & WRITE & CREATE & DELETE & ADMIN; // 存储目前的权限状态 private int flag; /** * 移除一项或多项权限 */ public void disable(int permission) { flag &= ~permission; } /** * 添加一项或多项权限 */ public void enable(int permission) { flag |= permission; } /** * * 得到当前权限 */ public int getPermission() { return flag; } /** * 是否拥有某项权限 */ public boolean isAllow(int permission) { return (flag & permission) == permission; } /** * 是否禁用了某些权限 */ public boolean isNotAllow(int permission) { return (flag & permission) == 0; } /** * 是否仅仅拥有某些权限 */ public boolean isOnlyAllow(int permission) { return flag == permission; } /** * 重新设置权限 */ public void setPermission(int permission) { flag = permission; } }
相关推荐
位运算符的应用 (源操作数s 掩码mask) (1) 按位与-- & 1 清零特定位 (mask中特定位置0,其它位为1,s=s&mask) 2 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask) (2) 按位或-- | 常用来将源操作数某些...
shell实现netmask掩码和cidr掩码位转换1
为什么拨号得到的32位掩码的IP可以上网? [转]PPPOE拨号后得到的地址是32位掩码,网关与IP地址相同都是正确的,原因和BAS(接入服务器)的工作原理有关。
好用的子网掩码计算,非常方便。
实现通过ip地址和子网掩码位数计算得出子网段的ip地址范围
浅谈Linux中文件访问权限与权限掩码关系
ip地址掩码,反掩码转换。软件支持将掩码长度转换为掩码或反掩码。
根据网段ip和掩码自动计算ip段,ip相关操作基础类。包括:根据 ip/掩码位 计算IP段的起始IP;根据 ip/掩码位 计算IP段的终止IP;计算子网大小等。
子网掩码计算器下载/子网掩码计算器单机版--亲测好用 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 子网掩码计算器下载/子网掩码计算器单机版--亲测好用 ...
子网计算 掩码 二进制位数 换算 192.168.0.0/30 192.168.0.0/24 192.168.0.0/22 192.168.0.0/20 192.168.0.0/18 之类的范围计算
子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器
目前为止最好用的: IPV6子网掩码计算器
子网掩码计算器最新版(支持IPV6,31位子网掩码) 子网掩码计算器(功能最强大,子网划分最好的工具)
子网掩码计算子网掩码计算子网掩码计算子网掩码计算子网掩码计算子网掩码计算
子网掩码及其应用子网掩码及其应用子网掩码及其应用子网掩码及其应用子网掩码及其应用
中文子网掩码和通配符掩码计算器 简单实用
本文实例讲述了Python实现的根据IP地址计算子网掩码位数功能。分享给大家供大家参考,具体如下: #!/usr/bin/env python # coding:utf-8 #!/bin/bash netmask = '255.255.255.0' result = print netmask for num ...
用C语言实现的一个简单的子网掩码计算程序,先输入网段地址,再输入要分的子网数量,程序以点分二进制输出子网掩码。
子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器子网掩码计算器
用户只要在该ip子网掩码计算器中输入点分十进制的IP地址,可以立刻判断出地址类,并显示其子网位、主机位、符合条件的子网数量、每个子网所包含的有效主机数量、所属子网地址、子网掩码、子网的广播地址以及当前子网...