菜鸟刚刚开始学习脚本,看到了这样一个例子:
#!/bin/bash
let x=2 y=2**3 #**是乘幂
(( w=(y/x) + ( (~ ++x) & 0x0f) ))
echo $? w=$w
不明白( (~ ++x) & 0x0f) )是怎么算出12的, 困惑ing
关于shell的数学运算符
-
- 帖子: 31
- 注册时间: 2013-04-08 17:01
- 系统: debian7.0
关于shell的数学运算符
ubuntu12.04不好用,于是我叛逃了。。。
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 关于shell的数学运算符
[bash]
#!/bin/bash
(( p1=(~ 3) ))
(( p2= p1 & 0x0f ))
printf "%x\t%x\t%d\n" $p1 $p2 $p2
[/bash]
这是位运算吧。
开始的时候x=2,运算前先自加,2自加便是3。
这就变成了
在这里3转换为16进制是0x03,取反后是0xfc。
现在成了
算一下
可以知道十六进制的0xfc转换为十进制是252。
而十六进制的0x0f则是15。
十六进制的0xfc转为二进制的结果是11111100。
十六进制的0x0f转换为二进制的结果是00001111。
现在成了11111100 & 00001111的位运算了。
结果不难得知是00001100,转化为十进制便是((p2x=2#1100));echo $p2x。
#!/bin/bash
(( p1=(~ 3) ))
(( p2= p1 & 0x0f ))
printf "%x\t%x\t%d\n" $p1 $p2 $p2
[/bash]
这是位运算吧。
开始的时候x=2,运算前先自加,2自加便是3。
这就变成了
代码: 全选
( (~ 3) & 0x0f) )
现在成了
代码: 全选
(( 0xfc & 0x0f ))
代码: 全选
printf "%d\n" 0xfc
而十六进制的0x0f则是15。
代码: 全选
echo "ibase=16;obase=2;FC" |bc
代码: 全选
echo "ibase=16;obase=2;0F" |bc
现在成了11111100 & 00001111的位运算了。
结果不难得知是00001100,转化为十进制便是((p2x=2#1100));echo $p2x。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
- b33e
- 帖子: 3864
- 注册时间: 2011-06-07 14:20
- 系统: Mint18
-
- 帖子: 31
- 注册时间: 2013-04-08 17:01
- 系统: debian7.0
- needle
- 帖子: 78
- 注册时间: 2009-12-01 13:34
Re: 关于shell的数学运算符
我自认为自己算是脚本高手了~
看了下阁下的语句,
oh,s-h-i-t,
老子不会……
看了下阁下的语句,
oh,s-h-i-t,
老子不会……
- naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
- bzhao
- 帖子: 250
- 注册时间: 2008-07-05 2:15
- 系统: XUbuntu