C语言基础题:权限修改

在 Linux 操作系统中文件的权限可以通过 rwx 的方式来表示,r 表示可读,w 表示可写,x 表示可执行。

在操作系统实现这个功能时,采用的方式是按位存储的。当我们不给任何权限时,存储表现为三个二进制位 0,如果可读则第一位会变成 1、如果可写则第二位会变成 1、如果可执行则第三位会变成 1。例如

如果可读、可写、可运行,就表示为二进制的 111111,转换成十进制就是 77。
如果可读、可写、不可运行,就表示为二进制的 110110,转换成十进制就是 66。
如果可读、不可写、可运行,就表示为二进制的 101101,转换成十进制就是 55。
在这题中,我们会得到文件当前的权限和希望添加或删除的权限(如果已经对存在/不存在的权限添加/删除则不做改变)。你需要输出最终改变后的权限的十进制描述。

提示 1:r,w,x 的顺序是不会改变的,不会出现 r 出现在 w 后或 x 出现在 w 之前一类的情况

答案自己写的,不知道有没有漏洞

#include <stdio.h>
int main() {
    int mod = 0;;
    char n ;; 
    int i = 0;
    
    
    while(scanf("%c", &n) != EOF){
        if (n == '-') 
            i = -1;
        else if(n == '+')
            i = 0;
        if (i == -1) {
            switch(n){
                case 'r':mod = mod & 0x3;break;
                case 'w':mod = mod & 0x5;break;
                case 'x':mod = mod & 0x6;break;
            }
        }else  {
            switch(n){
                case 'r':mod = mod | 0x4;break;
                case 'w':mod = mod | 0x2;break;
                case 'x':mod = mod | 0x1;break; 
            }        
        }
    }
    printf("%d\n", mod);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值