分页: 1 / 1

关于shell的数学运算符

发表于 : 2013-04-26 1:56
Rainy.mayday
菜鸟刚刚开始学习脚本,看到了这样一个例子
#!/bin/bash

let x=2 y=2**3 #**是乘幂

(( w=(y/x) + ( (~ ++x) & 0x0f) ))

echo $? w=$w


不明白( (~ ++x) & 0x0f) )是怎么算出12的:em06 困惑ing

Re: 关于shell的数学运算符

发表于 : 2013-04-26 8:38
YeLee
[bash]
#!/bin/bash
(( p1=(~ 3) ))
(( p2= p1 & 0x0f ))
printf "%x\t%x\t%d\n" $p1 $p2 $p2
[/bash]
这是位运算吧。
开始的时候x=2,运算前先自加,2自加便是3。
这就变成了

代码: 全选

( (~ 3) & 0x0f) )
在这里3转换为16进制是0x03,取反后是0xfc。
现在成了

代码: 全选

(( 0xfc & 0x0f ))
算一下

代码: 全选

printf "%d\n" 0xfc
可以知道十六进制的0xfc转换为十进制是252。
而十六进制的0x0f则是15。

代码: 全选

echo "ibase=16;obase=2;FC" |bc
十六进制的0xfc转为二进制的结果是11111100。

代码: 全选

echo "ibase=16;obase=2;0F" |bc
十六进制的0x0f转换为二进制的结果是00001111。
现在成了11111100 & 00001111的位运算了。
结果不难得知是00001100,转化为十进制便是((p2x=2#1100));echo $p2x。

Re: 关于shell的数学运算符

发表于 : 2013-04-26 8:45
b33e
啧啧,学习了 :em01

Re: 关于shell的数学运算符

发表于 : 2013-04-26 10:42
Rainy.mayday
原来是位运算和进制的转化啊,长见识了 :em02

Re: 关于shell的数学运算符

发表于 : 2013-04-26 11:01
needle
我自认为自己算是脚本高手了~

看了下阁下的语句,

oh,s-h-i-t,
老子不会……

Re: 关于shell的数学运算符

发表于 : 2013-06-03 8:58
naturalaw
gnome3好看,鼠标点得累死人,眼睛定位累,总点不到啊,程序栏栏一多界面就扁了

Re: 关于shell的数学运算符

发表于 : 2013-06-19 17:34
bzhao
这些是来自C的按位操作了!