关于linux下chmod 命令的二进制表达式,你应该能看懂

文章介绍了如何通过二进制数理解Linux中的chmod命令,提供了一种简化的方法将数字转换为相应的二进制权限表示,例如将3转换为011,2转换为010,并扩展到如何处理更大的数字如8,转化为1000。同时,还提及了二进制转十进制的算法。
摘要由CSDN通过智能技术生成

 由于之前一直用windows server 服务器,一直很少接触linux系统了, 最近回顾了一下linux,发现被chmod这个赋权命令的二进制表达是给整懵逼了,只好网上找了下原理,发现太麻烦了,自己研究了一个方法,现整理如下:

  怕你们懵逼,先逆向讲一下:

  比如:二进制数011是个啥?

 首先看得出来它是个三位数,那我们就先排好0到2这三个2的次方,由高到低:

 2^2,2^1,2^0

好,操作开始:

 二的二次方也就是2^2=4,4*0=0;

2^1=2,1*2=2;

2^0=1,1*1=1。

0+2+1=3

没错二进制数011就是3

但是我们的需求是要将3转成011,这又该怎么办?

没关系,也很简单:

还是老演员:

2^2,2^1,2^0

2^2=4,4>3,那么第一个位置上的数不可取,直接标0,

2^1=2,2<3(1*2<(3-0*4)),但是2*2>3,所以只能是1*2,取1,

2^0=1,1=3-1*2,所以是1*2,直接给1。

这不011就来了。

好同理再来把2变成这样的二进制数:

2^2,2^1,2^0

2^2=4,4>2,那么第一个位置上的数不可取,直接标0,

2^1=2,刚好等于二,那么几乘以2等于2,答案是1,取1,

2^0=1,上面已经取完了,这里就直接给0

所以2=010

由于linux的文件权限最多也就是 111 111 111,即777,所以以上方法够用了。

但如果不限如此非要把8转成二进制,也可以

首先2^2=4,那么我们上2?后面00?

很显然不行二进制只有0和1

那就加一个2的次方:

2^3,2^2,2^1,2^0

这样就能得到1000,

没错8转成二进制就是1000

附:二进制转十进制算法:

 private static void MyBinary()
        {
            Console.WriteLine("请输入您要转成二进制数的十进制数字:");
            int i = int.Parse(Console.ReadLine());
            int j = 0;
            bool b = true;
            List<int> list = new List<int>();
            list.Add((int)Math.Pow(2, j));
            while (b)
            {
                if (i / (int)Math.Pow(2, j) > 1)
                {
                    j++;
                    list.Add((int)Math.Pow(2,j ));
                }
                else
                {
                    break;
                }

            }
            List<int> ints = new List<int>();
            int z;
            for (int x = list.Count(); x >0; x--)
            {
                z = i / list.Last();
                ints.Add(z);
                if (z > 0) { i -= list.Last(); }
                list.Remove(list.Last());
            }
            StringBuilder sb=new StringBuilder();
            foreach (var item in ints)
            {
                sb.Append(item);
            }
            Console.WriteLine(sb);

        }

持续更新中......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值