Sorunuz "Java neden imzalanmamış girişleri desteklemiyor?"
Ve sorunuza cevabım, Java'nın tüm ilkel türlerinin olmasını istiyor: bayt , karakter , kısa , int ve uzun , montajda olduğu gibi sırasıyla bayt , kelime , dword ve qword olarak ele alınmalı ve Java operatörleri imzalı char hariç tüm ilkel türlerinde işlemler , ancak sadece char üzerinde sadece 16 bit imzasızdır.
Yani statik yöntemler için varsayalım imzasız işlemleri de hem 32 ve 64 bit.
İmzasız işlemler için statik yöntemleri çağrılabilen son sınıfa ihtiyacınız vardır .
Bu son sınıfı oluşturabilir, istediğiniz adı çağırabilir ve statik yöntemlerini uygulayabilirsiniz.
Statik yöntemlerin nasıl uygulanacağı hakkında hiçbir fikriniz yoksa bu bağlantı size yardımcı olabilir.
Bence, Java değil C ++ diline benzer hiç o takdirde ne imzasız türlerini destekler ne de operatör aşırı yüklenmesini Java hem C ++ ve C den tamamen farklı dil olarak ele alınması gerektiğini düşünüyorum böylece,
Bu arada diller adına da tamamen farklı.
Bu yüzden Java'da C'ye benzer kod yazmanızı önermiyorum ve C ++ 'a benzer kod yazmayı hiç önermiyorum, çünkü Java'da C ++' da daha sonra ne yapmak istediğinizi yapamazsınız, yani kod hiç C ++ gibi olmaya devam etmeyecek ve benim için bu böyle kodlamak, ortadaki stili değiştirmek için kötü.
İmzalı işlemler için de statik yöntemler yazmanızı ve kullanmanızı öneririm, böylece kodda yalnızca imzalı işlemlere ihtiyacınız yoksa, işleçlerin kod karışımında ve hem imzalı hem de imzasız işlemler için statik yöntemler görmezsiniz ve yalnızca operatörleri kullanın.
Ayrıca kısa , int ve uzun ilkel türler kullanmaktan kaçınmanızı ve bunun yerine sırasıyla word , dword ve qword kullanmanızı öneririm ve operatörleri kullanmak yerine imzasız işlemler ve / veya imzalı işlemler için statik yöntemleri çağırmak üzeresiniz.
Yalnızca imzalı işlemleri yapmak ve işleçleri yalnızca kodda kullanmak üzereyseniz , bu ilkel türleri kısa , int ve uzun kullanmakta sorun yoktur .
Aslında kelime , dword ve QWORD do not dilde var, ancak her biri için yeni bir sınıf oluşturup bunu her uygulaması çok kolay olmalıdır:
Sınıf kelimesinin ilk tip tutan kısa sadece sınıf DWORD basit bir tür tutan int sadece sınıf QWORD ilkel tip tutan uzun sadece. Şimdi tüm imzasız ve imzalı yöntemler seçiminiz kadar statik olsun ya da olmasın, her sınıfta uygulayabilirsiniz, yani tüm 16 bit işlemleri hem imzasız hem de imzalı kelime sınıfında anlam adları vererek , hem 32 bit işlemleri hem de imzasız anlam isimleri vererek imzalanan dword imzasız ve üzerinde anlam isimlerini vererek imzalanmış hem sınıf ve tüm 64 bit işlemleri QWORD sınıfına.
Her yöntem için çok fazla farklı ad vermek istemiyorsanız, Java'da aşırı yüklemeyi her zaman kullanabilirsiniz, Java'nın bunu da kaldırmadığını okumak güzel !
8 bit imzalı işlemler için işleçler yerine işleçler ve hiçbir işleçleri olmayan 8 bit işaretsiz işlemler için yöntemler istiyorsanız, Bayt sınıfını oluşturabilirsiniz (ilk 'B' harfinin büyük olduğunu unutmayın, bu nedenle ilkel tip bayt ) ve bu sınıftaki yöntemleri uygular.
Değere göre geçme ve referans olarak geçme hakkında:
Yanılmıyorsam, C # 'da olduğu gibi, ilkel nesneler doğal olarak değere göre geçirilir, ancak sınıf nesneleri doğal olarak referansla geçirilir, böylece Byte , word , dword ve qword türündeki nesneler değere göre değil referansla geçirilir varsayılan olarak. Keşke Java C # gibi yapı nesneleri vardı , bu yüzden tüm Byte , kelime , dword ve qword sınıf yerine yapı olarak uygulanabilir, bu nedenle varsayılan olarak değere göre iletilir ve varsayılan olarak referans olarak değil, C #'daki herhangi bir yapı nesnesi gibi, ilkel türler gibi, varsayılan olarak referans olarak değil, değere göre iletilir, ancak Java, C # 'dan daha kötü olduğundan ve bununla başa çıkmak için, varsayılan olarak değere göre değil, yalnızca başvuru ile iletilen sınıflar ve arabirimler vardır. Bu nedenle , Bayt , kelime , dword ve qword nesnelerini, Java'daki ve C #'daki diğer herhangi bir sınıf nesnesi gibi, referansa göre değil, değere göre iletmek istiyorsanız, kopya oluşturucuyu kullanmanız gerekecektir.
Aklıma gelen tek çözüm bu. İsterdim ki o elimden sadece taşıyıcıların C # aksine hiç kelime, dword ve QWORD ancak Java ne destek typedef ne de kullanmaya ilkel türleri, typedef kullanarak C'nin typedef eşdeğerdir.
Çıktı hakkında:
Aynı bit dizisi için bunları birçok şekilde yazdırabilirsiniz: İkili olarak, ondalık olarak (C printf'de% u anlamı gibi), sekizli (C printf'de% o anlamı gibi), onaltılık olarak (gibi C printf içindeki% x'in anlamı) ve tamsayı olarak (C printf içindeki% d'nin anlamı gibi).
C printf'nin işleve parametre olarak iletilen değişkenlerin türünü bilmediğini unutmayın, bu nedenle printf her bir değişkenin türünü yalnızca işlevin ilk parametresine iletilen char * nesnesinden bilir.
Sınıfların her birinde: Bayt , sözcük , dword ve qword , yazdırma yöntemini uygulayabilir ve printf'in işlevselliğini elde edebilirsiniz, sınıfın ilkel türü imzalanmış olsa bile, aşağıdakileri içeren bazı algoritmaları izleyerek yine de imzasız olarak yazdırabilirsiniz mantıksal ve shift işlemlerinin basamakları çıktıya yazdırmasını sağlar.
Ne yazık ki size verdiğim bağlantı bu yazdırma yöntemlerinin nasıl uygulanacağını göstermiyor, ancak eminim ki bu yazdırma yöntemlerini uygulamak için gereken algoritmalar için google.
Sorunuza cevap verebileceğim ve size önerebileceğim bu kadar.