2016-11-18 15 views

Trả lời

7

Bạn có thể dễ dàng bitshift số như vậy trong bối cảnh số học:

$ hex="0x12345678" 
$ result=$((hex << 1)) 
$ printf "Result in hex notation: 0x%x\n" "$result" 
0x2468acf0 
2

Yes.

Biểu thức số học hỗ trợ 16 số cơ sở và tất cả các toán tử C thông thường.

Ví dụ:

$ hex="0xff" 
$ echo $((hex >> 1)) 
127 
7

Tất nhiên bạn có thể làm hoạt động Bitwise (bên trong một Expansion Arithmetic):

$ echo "$((0x12345678 << 1))" 
610839792 

Hoặc:

$ echo "$((16#12345678 << 1))" 
610839792 

Giá trị có thể được đặt trong một cũng thay đổi:

$ var=0x12345678   # or var=16#12345678 
$ echo "$((var << 1))" 
610839792 

Và bạn có thể làm OR, AND và XOR:

$ echo "$((0x123456 | 0x876543))" 
9925975 

Và để có được kết quả trong hex cũng như:

$ printf '%X\n' "$((0x12345678 | 0xDEADBEEF))"  # Bitwise OR 
DEBDFEFF 

$ printf '%X\n' "$((0x12345678 & 0xDEADBEEF))"  # Bitwise AND 
12241668 

$ printf '%X\n' "$((0x12345678^0xDEADBEEF))"  # Bitwise XOR 
CC99E897 
Các vấn đề liên quan