- 论坛徽章:
- 0
|
本帖最后由 personball 于 2012-08-03 17:28 编辑
回复 1# riptide2012
都写了是和base-1进行& 运算。。你16进制还和16去&??
等贫道再仔细算算
首先明确下符号含义:
& 位运算之 与
~ 位运算之 取反
优先级 ~ 大于 &
先看一下~运算,位的正负数表示
比如 ~7 ,
7的二进制表示为 0 000000...000 0111
第一个符号位(暂时就按0表示正数来看),中间N多个0取决于整体有多少位(比如int可以最多16位也可以32位,取决系统和具体的环境吧,先不管)
echo $((~7)) 可以得到结果 -8
-8的二进制表示为 1 111111...111 1000
相应的给个正数8的二进制表示参考 0 000000...000 1000
对齐一下看看
0 00000...000 0111 #7
1 11111...111 1000 #~7 即 -8
0 00000...000 1000 #8
来个比8小的数字,比如6
0 00000...000 0110 #6
跟 ~7 进行 与 运算
1 11111...111 1000 #~7 即-8
与运算,结果明显为0,
来个比8大的数字,比如10
0 00000...000 1010 #10
与运算,对齐了自己看,结果为8
直接拿字母来进行 &~ 运算的话,估计都被当成0了,16进制的情况,要加上0x标记,可以试试在bash命令上 echo $((0xa&~15))
差不多这样了,可能底层实现有差异,大概的理论记得学校里就这么教的。
|
|