Ngoài các câu trả lời ở đây, tôi có thể giải thích cách hoạt động của hai bổ sung.
Một byte bao gồm 8 bit.
00000000 nghĩa 0
11111111 nghĩa là 255
Tuy nhiên, nếu chúng ta chỉ nói như vậy, chúng ta không thể phân biệt được các số dương hoặc âm là. Vì lý do này, bit ở phía bên trái cung cấp cho chúng tôi thông tin này. Nếu bit ở phía bên trái là 0, bạn có thể bắt đầu thêm giá trị của các bit khác trên đầu số không. Nếu bit là 1, bạn nên bắt đầu thêm vào đầu -128. Bởi vì bit ở phía bên trái là hai với sức mạnh của bảy.
Ví dụ;
Trong các ví dụ này, bit ở bên trái là 1, điều đó có nghĩa là chúng tôi đang thêm giá trị của các bit khác lên đầu -128.
10000000 = -128 (-128 + 0)
10000001 = -127 (-128 + 1)
10000011 = -125 (-128 + 3)
10000111 = -121 (-128 + 7)
byte Cùng nhưng lần này, các bit bên trái là 0. Điều đó có nghĩa, chúng tôi đang bắt đầu để thêm trên đỉnh 0.
00000000 = 0 (0 + 0)
00000001 = 1 (0 + 1)
00000011 = 3 (0 + 3)
00000111 = 7 (0 + 7)
Nếu chúng ta là ok đến nay, câu trả lời cho bạn câu hỏi, số nhỏ nhất có thể với 8 bit với quy tắc này là;
10000000 = -128
số lớn nhất có thể
011111111 = 127
Đó là lý do tại sao, phạm vi là giữa -128 và 127.
Nguồn
2017-03-06 10:43:34
[Hai của Complement] (http: //en.wikipedia.org/wiki/Two's_complement) –
Nó tương tự với các kiểu số nguyên khác 'short',' int' và 'long'. – starblue
Một câu hỏi hay hơn là 'tại sao loại byte java không phải là phạm vi 0,2255'? Trong thực tế nhiều người hỏi câu hỏi này, trong hầu hết các ngôn ngữ 'byte' loại là unsigned, nhưng trong java' byte' được ký kết quá, và tôi (và nhiều người khác) tin rằng nó là một thiết kế xấu mà vẫn còn trong Java từ một ngày. Có vấn đề khi bạn đang làm việc JNI, và tin tôi khi bạn đặt tên một cái gì đó 'byte' bạn muốn 0..255! –