2016-11-06 25 views
9

Đây là một câu hỏi lý thuyết để hiểu đánh giá của Java về các phép tính số học. Vì +- có cùng mức độ ưu tiên, tôi không hoàn toàn hiểu cách Java đánh giá các biểu thức sau (trong đó có nhiều hơn một toán tử +- giữa hai toán hạng).Ưu tiên Java cho nhiều + và - toán tử

public static void main(String[] args) { 
    int a = 1; 
    int b = 2; 
    System.out.println(a+-b); // results in -1 
    System.out.println(a-+b); // results in -1 
    System.out.println(a+-+b); // results in -1 
    System.out.println(a-+-b); // results in 3 
    System.out.println(a-+-+b); // results in 3 
    System.out.println(a+-+-b); // results in 3 
    System.out.println(a-+-+-b); // results in -1 
    System.out.println(a+-+-+b); // results in 3 
} 

Từ Java 8 Language Specification (§15.8.2):

Toán tử + nhị phân thực hiện Ngoài ra khi áp dụng cho hai toán hạng kiểu số, sản xuất tổng các toán hạng.
Toán tử nhị phân thực hiện phép trừ, tạo ra sự khác biệt của hai toán hạng số.
[...]
Bổ sung là một hoạt động giao hoán nếu biểu thức toán hạng không có tác dụng phụ.
Bổ sung số nguyên là kết hợp khi các toán hạng là tất cả cùng loại.

Điều tôi cũng nhận thấy, là mỗi khi # người hoạt động thậm chí là, kết quả là như nhau và thứ tự không quan trọng. Nhưng khi # người hoạt động là lẻ, điều này không nhất thiết ảnh hưởng đến kết quả. Ví dụ. trong hai biểu thức sau có thêm một số - hơn +, tuy nhiên kết quả lại khác.

System.out.println(a-+-b); // results in 3 
System.out.println(a-+-+-b); // results in -1 

Với tất cả thông tin đó tôi vẫn không thấy mẫu hoặc cách thức hoạt động của tính năng này.

+0

i tin * a + -b * được thực hiện dưới dạng * a + (-b) *. kiểm tra nó ra –

+1

@Sanket Makani '--' và' ++ 'không được phép trong trường hợp đó bởi vì Java coi đó là hoạt động tăng/giảm – ncw

Trả lời

9

Trong môn toán, bạn đánh giá như thế nào?

a - + - b 

Thêm một số dấu ngoặc giúp:

a - (+ (-b)) 

Chúng ta có thể làm được điều này, bởi vì đây không vi phạm các quy tắc ưu tiên.

Sau đó, chúng ta có thể bắt đầu giảm: + (-b) thực sự là -b, và a - -b thực sự a + b, vì vậy kết quả là 1 + 2 = 3.

Hãy xem điều thứ hai:

a - + - + - b 
a - (+ (- (+ (-b)))) 
a - (+ (- (-b))) 
a - (+ b) 
a - b 
1 - 2 = -1 

quy tắc đơn giản Vì vậy công việc toán học một cách tự nhiên.

2

Tôi tin rằng các dấu hiệu - phủ nhận biểu thức:

int a = 1; 
int b = 2; 
System.out.println(a+(-b)); 
System.out.println(a+-b); 

cả in -1. Đây là từ tài liệu oracle:

Toán tử trừ đơn nhất; phủ nhận một biểu thức

dấu trừ chỉ đơn giản là thay đổi dấu của số sau nó. Nếu b là số âm, thì a+-b sẽ trả lại 3.

2

Đánh giá của nó vì nó là cách bạn tính toán trong toán học với phép cộng và trừ. Trong ví dụ của bạn, tất cả các tính toán của bạn bắt đầu bằng số nhỏ hơn a=1, sau đó bạn có -+ các dấu hiệu giữa một số nhỏ và số lớn hơn b = 2. ví dụ: khi bạn thực hiện 1 -- 2, bạn đang thực hiện 1+2 vì 2 - các biển báo hủy nhau trở thành 1 + 2, 1 - 2 sẽ là -1 vì 2 (số lớn hơn có dấu - làm cho số nguyên âm, thêm 1 vào số nguyên âm tăng giá trị của nó bởi một

2

này dường như là một vấn đề toán học ... (- & - = +), (- & + = -) và (+ & + = +)

int a = 1; 
int b = 2; 
System.out.println(a+-b); // 1 +(-2) = 1-2 = -1 
System.out.println(a-+b); // 1-(+2) = 1-2 = -1 
System.out.println(a+-+b); // 1+-(+2) = 1-(+2) = 1-2 = 1 
System.out.println(a-+-b); // 1- + (-2) = 1- (-2) = 1+2 =3 
System.out.println(a-+-+b); // 1 - + - (+2) = 1 - - (+2) = 1-2 = -1 
System.out.println(a+-+-b); // 1+ - + (-2) =1 - + (-2) = 1+2 = 3 
System.out.println(a-+-+-b); // 1-+-+(-2) = 1 - - (-2) = 1 + (-2) = -1 
System.out.println(a+-+-+b); // 1 +- +- (+2) = 1 -- (+2) = 1+2 = 3 
Các vấn đề liên quan