Toán tử ^ trong Java
^
trong Java là toán tử độc quyền hoặc ("xor").
Hãy lấy 5^6
ví dụ:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Đây là bảng chân lý cho bitwise ( JLS 15.22.1 ) và logic ( JLS 15.22.2 ):
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Đơn giản hơn, bạn cũng có thể nghĩ về xor là "cái này hay cái kia, nhưng không phải cả hai !".
Xem thêm
Số mũ trong Java
Đối với lũy thừa số nguyên, thật không may, Java không có toán tử như vậy. Bạn có thể sử dụng double Math.pow(double, double)
(truyền kết quả tớiint
nếu cần thiết).
Bạn cũng có thể sử dụng thủ thuật dịch chuyển bit truyền thống để tính toán một số quyền hạn của hai. Đó là, (1L << k)
là hai đến sức mạnh thứ k cho k=0..63
.
Xem thêm
Hợp nhất lưu ý : câu trả lời này đã được hợp nhất từ một câu hỏi khác trong đó ý định sử dụng lũy thừa để chuyển đổi một chuỗi"8675309"
thànhint
mà không sử dụngInteger.parseInt
như một bài tập lập trình (^
biểu thị từ lũy thừa từ bây giờ). Ý định của OP là tính toán8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; phần tiếp theo của câu trả lời này giải quyết vấn đề lũy thừa là không cần thiết cho nhiệm vụ này.
Đề án của H Corner
Giải quyết nhu cầu cụ thể của bạn , bạn thực sự không cần phải tính toán các sức mạnh khác nhau của 10. Bạn có thể sử dụng cái được gọi là sơ đồ của Horner , không chỉ đơn giản mà còn hiệu quả.
Vì bạn đang làm điều này như một bài tập cá nhân, tôi sẽ không cung cấp mã Java, nhưng đây là ý tưởng chính:
8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0
= (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9
Thoạt nhìn có vẻ phức tạp, nhưng thực sự không phải vậy. Về cơ bản, bạn đọc các chữ số từ trái sang phải và bạn nhân kết quả của mình cho đến 10 trước khi thêm chữ số tiếp theo.
Ở dạng bảng:
step result digit result*10+digit
1 init=0 8 8
2 8 6 86
3 86 7 867
4 867 5 8675
5 8675 3 86753
6 86753 0 867530
7 867530 9 8675309=final