关于shell的数学运算符

sh/bash/dash/ksh/zsh等Shell脚本
回复
Rainy.mayday
帖子: 31
注册时间: 2013-04-08 17:01
系统: debian7.0

关于shell的数学运算符

#1

帖子 Rainy.mayday » 2013-04-26 1:56

菜鸟刚刚开始学习脚本,看到了这样一个例子
#!/bin/bash

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

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

echo $? w=$w


不明白( (~ ++x) & 0x0f) )是怎么算出12的:em06 困惑ing
ubuntu12.04不好用,于是我叛逃了。。。
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 关于shell的数学运算符

#2

帖子 YeLee » 2013-04-26 8:38

[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。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
b33e
帖子: 3864
注册时间: 2011-06-07 14:20
系统: Mint18

Re: 关于shell的数学运算符

#3

帖子 b33e » 2013-04-26 8:45

啧啧,学习了 :em01
Rainy.mayday
帖子: 31
注册时间: 2013-04-08 17:01
系统: debian7.0

Re: 关于shell的数学运算符

#4

帖子 Rainy.mayday » 2013-04-26 10:42

原来是位运算和进制的转化啊,长见识了 :em02
ubuntu12.04不好用,于是我叛逃了。。。
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34

Re: 关于shell的数学运算符

#5

帖子 needle » 2013-04-26 11:01

我自认为自己算是脚本高手了~

看了下阁下的语句,

oh,s-h-i-t,
老子不会……
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 关于shell的数学运算符

#6

帖子 naturalaw » 2013-06-03 8:58

gnome3好看,鼠标点得累死人,眼睛定位累,总点不到啊,程序栏栏一多界面就扁了
  • The eternal law
头像
bzhao
帖子: 250
注册时间: 2008-07-05 2:15
系统: XUbuntu

Re: 关于shell的数学运算符

#7

帖子 bzhao » 2013-06-19 17:34

这些是来自C的按位操作了!
Bill Z
stat -c %a filename
\_.\{-}
回复