gas*_*ter 15 shell bash arithmetic
$ echo $(( 255 ))
255
$ echo $(( 33 ))
33
$ echo $(( ~33 ))
-34
$ echo $(( ~255 ))
-256
$
Run Code Online (Sandbox Code Playgroud)
我的内核是:
$ uname -a
Linux HOSTNAME 3.2.0-40-generic-pae #64-Ubuntu SMP Mon Mar 25 21:44:41 UTC 2013 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
问题: ~用于否定 AFAIK 数字。但是为什么~33产生-34,为什么~255产生-256?
mic*_*has 24
bash 的手册页说:
! ~ logical and bitwise negation
Run Code Online (Sandbox Code Playgroud)
有符号数通常以二进制补码表示形式存储:
...
-4 = 1100
-3 = 1101
-2 = 1110
-1 = 1111
0 = 0000
1 = 0001
2 = 0010
3 = 0011
...
Run Code Online (Sandbox Code Playgroud)
这意味着,如果你采用像 2 这样的数字,它会被按位解释为 0010。按位求反后,它变成 1101,这是 -3 的表示。
| 归档时间: |
|
| 查看次数: |
4939 次 |
| 最近记录: |