技術討論區 > 程式討論版

請問 "例如權限" 程式的計算

頁: (1/1)

dark:

像 linux 檔案權限 777 , 755 ...
是將三種狀態 (rwx) 互相搭配的聰明表示法

以此觀念 , 小弟把 5 種資料欄位是否有值 , 以一個數字代表
那就是
資料a = 1 = 2^0
資料b = 2 = 2^1
資料c = 4 = 2^2
資料d = 8 = 2^3
資料e = 16 = 2^4

若值為 13 => 1+4+8 => a , c , d 有資料

0~31 種搭配 , 可能看久了像檔案權限一樣 , 一眼就有答案
今天想程式化
想半天卻想不出 程式 / 數學 上 , 怎麼判斷 13 包含 4

不知哪位能提供一下答案 , 謝謝!!


dark:

只想到純程式的方法 ... 想不出數學上的公式解法

1. 把 2 的 n 次一一列出 , 從大的數字開始比
2. 如果比 2**n 大 , 代表包含 , 減去後在筆下一個數字


簡單用 bash 表示

go(){
num=$1
echo -n ,
for i in $(for j in {4..0};do echo $((2**$j));done);do
   if [ $num -ge $i ] ; then echo -n $i, ; num=$(($num-$i)) ; fi
done

}

# go 13
,8,4,1,



netman:

換成二進位如何?

--- 代碼: ---13 =  1 1 0 1
dec:  8 4 0 1

--- 程式碼結尾 ---

一時技癢,獻醜一下:

--- 代碼: ---#!/bin/bash
num=$1
while echo "${num:-null}" | grep -q '[^0-9]'; do
read -p "Enter a number: " num
done
bin_str=$(echo "obase=2;ibase=10;$num" | bc)
pos=${#bin_str}
for ((i=0;i<${#bin_str};i++))
do
((pos--))
[ ${bin_str:$i:1} = 1 ] && echo "2^$pos" | bc
done | xargs

--- 程式碼結尾 ---


Yamaka:

判斷一個數值是否包含某數,要用位元運算, 例如


--- 引用 ---$ (((13&4)==4)) && echo 1 || echo 0
1
$ (((13&2)==2)) && echo 1 || echo 0
0
$

--- 引用結尾 ---


dark:

就是這答案 ... 就是這答案 ... 就是 0 跟 1 .....
哎呀 ... 想那麼久 , 又知道 2 次方 ... 怎就沒跟二進位連線

原來位元運算是這個意思阿 ... 小弟現在才知道


頁: (1/1)

前往完整版本