在 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;
}