Kısa bir süre önce bir Java kursu (1 haftalık bir çöküş kursu) yaptım ve bazı ikili matematiği ele aldık.Unary "~" operatörü - Burada tam olarak ne oluyor?
Bu birli ~ operatörü (Ben deniyor sanırım tilde?) Böylece bize açıkladı:
İçine bir "1" ve her "1" içine her "0" dönüm bit deseni ters çevirir bir " 0" . , ör. Bayt için 8 bit vardır. Eğer şu byte varsa: 00000000 ters değeri yukarıdaki açıklama açık ve özlü 11111111.
haline dönüşür ve tamamen bana mantıklı olacaktır. O zamana kadar, onu uygulamaya çalışıyorum.
Verilen bu:
byte x = 3;
byte y = 5;
System.out.println(~x);
System.out.println(~y);
çıktısı:
-4
-6
Bunun nasıl gerçekleştiğini hakkında çok karıştı. ikilik sistemde 3 11 olduğunu
, o zaman bu inversiyon açıkça olmadığı -3, 00 olurdu.
Ama 8 bit bir bayt içinde olduğu gibi, daha sonra +3 ikili gösterimi 00000011 olarak yazılmamalıdır?
11111100 olması tersine çevrilebilir. Ondalık değere dönüştürülürse bu 252 olur. +3'ı 011 olarak yazarsanız, gerçekten 100'e dönüşür, bu da +4'dür. negatif bir sayı olduğunu biliyor musun?
Eğer bir işareti olarak ilk kullandıkları taktirde 1100, dönüştüğü, 0011 çalışırsanız hakkında, o zaman gerçekten hale gelmez Nasıl -4.Ah - bu noktada bir yere gittiğimi sandım.
Ama sonra ikinci y değeri = biz bunu yazmak nasıl 5.
lazım? Aynı mantıkla, 5, ikili 0101 dönüşür 1010.
için tersine çevirir hangi Ve ben korkunç karıştı şimdi tarafta. Bu, işaretli bir -2 değeri mi, yoksa işaretsiz bir +10 ondalık değeri mi temsil ediyor? İkisi de basılmadığım -6.
Yine, bir baytın 8 basamağına kadar olan uzunluğu arttırırsam +5 00000101 olur, bu da tersine 11111010 olur. Ve bunu gerçekten -6'ya dönüştürmenin bir yolunu bulamıyorum.
Ben haline daha karıştı çıktısını burada neler olduğunu hiçbir fikri ve daha numarasına sahip olduğu gerçek olmayan biri, bu anlıyor mu. Bkz :-(.. belki biraz operatör işaretleri bakarak sevmez bu gösteri
Java'daki tüm sayısal sayısal türler * ile imzalanmıştır *. –
@MarkoTopolnik char sayısal bir türüdür ve imzalanmamıştır. –
2'nin tamamlayıcısı olduğuna ilişkin tüm çok yararlı cevaplardan sonra, bu videoyu oldukça iyi açıklayan bir video buldum. Cevap için teşekkürler. http://www.youtube.com/watch?v=Hof95YlLQk0&NR=1&feature=endscreen –