banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Thắc mắc về toàn tử trên bit Not  XML
  [Programming]   Thắc mắc về toàn tử trên bit Not 03/04/2008 10:30:51 (+0700) | #1 | 122914
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
Mình có 1 đoạn code:
...
byte x=1;
System.out.println(~x);
...
Khi chạy đoạn code thì nó in ra -2. Mọi người giúp mình giải thích tại sao với.
Theo như mình hiểu thì x biểu diễn dưới dạng binary thì là 00000001 vì vậy ~x phải là 11111110 đổi ra hệ thập phân rõ là khác với -2 . Hix cái này test trên C cũng ra kết quả như vậy, có lẽ nó liên quan tới hiểu biết về số nhị phân
Mong mọi người giúp đỡ.
Thanks
[Up] [Print Copy]
  [Question]   Re: Thắc mắc về toàn tử trên bit Not 03/04/2008 10:47:58 (+0700) | #2 | 122915
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
Mình vừa đọc trong cuốn thinking in java thì đc biết là java sử dụng hệ binary sử dụng bit dấu bù 2. Giờ thì đã hiểu
P/s: Sorry spam, Mod xóa bài hộ em với
[Up] [Print Copy]
  [Question]   Re: Thắc mắc về toàn tử trên bit Not 03/04/2008 20:38:10 (+0700) | #3 | 122965
Mr.Khoai
Moderator

Joined: 27/06/2006 01:55:07
Messages: 954
Offline
[Profile] [PM]
Chào zThienLongz,

Hiểu kiểu two complement rồi thì nên giải thích ra để đôi khi các thành viên khác sẽ có câu hỏi tương tự. Không có lý do gì để xóa.

khoai
[Up] [Print Copy]
  [Question]   Re: Thắc mắc về toàn tử trên bit Not 04/04/2008 12:25:03 (+0700) | #4 | 123153
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
Vâng anh Khoai đã nói vậy thì em xin đưa ra lời giải thích.
Như đã nói ở trên Java sử dụng mã bù 2 . Tức là khi biểu diễn 1 số nguyên dưới dạng số nhị phân người ta dùng mã bù 2 để biểu diễn số đó.
Trước hết các bạn cẩn hiểu cách biểu diễn bù 2 của 1 số nguyên N như thế nào?
Với hệ N+1 bit ta có thể biểu diễn các số từ -2^N cho đến 2^N-1. Vd như hệ 4 bit thì ta có thể dùng để biểu diễn các số từ -8 cho đến 7.
Để biểu diễn 1 số nguyên có dâu thì người ta dùng bít dấu:
Quy ước: 0: số dương
1: số âm
Để biểu diễn 1 số dương dưới dạng bù 2 ta viết số đó dưới dạng số nhị phân ko dấu như bình thường.
Để biểu diễn 1 số âm dưới dạng bù 2 ta làm như sau viết trị số của số đó về dạng số nhị phân ko dấu rùi thay các bit 0 thành bit 1 và ngược lại, sau đó cộng nhị phân thu được với 1 .Đó chính là mã bù 2 của số đó ban đầu.
VD:
Dùng hệ 4 bit biểu diễn mã bù 2 của các -8,-3,0 ,5, 7:
-8: 1000
-3: 1101
0: 0000
5: 0101
7: 0111
Bit đầu tiên của dãy nhị phân chính là bit dấu. Dựa vào đó ta có thể biết được mã bù đó biểu diễn số dương hay âm và từ đó sẽ giúp ta khôi phục số đó về hệ thập phân
Trở lại đoạn code trên các bạn chỉ cần nhìn bảng biểu diễn các số về dạng binary (sd mã bù 2) sau là có thể hiểu phần nào tại sao ra kết quả như vậy:
x , byte : 1 , binary:
00000001
~x , byte : -2 , binary:
11111110
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|