Pertanyaan Anda adalah "Mengapa Java tidak mendukung int yang tidak ditandatangani"?
Dan jawaban saya untuk pertanyaan Anda adalah bahwa Java ingin semua tipe primitifnya: byte , char , short , int dan long harus diperlakukan sebagai byte , word , dword dan qword , persis seperti dalam assembly, dan operator Java ditandatangani operasi pada semua itu tipe primitif kecuali untuk char , tetapi hanya pada char mereka tidak ditandatangani 16 bit saja.
Jadi metode statis seharusnya menjadi operasi yang tidak ditandatangani juga untuk 32 dan 64 bit.
Anda memerlukan kelas final, yang metode statisnya dapat dipanggil untuk operasi yang tidak ditandatangani .
Anda dapat membuat kelas akhir ini, sebut saja nama apa pun yang Anda inginkan dan terapkan metode statisnya.
Jika Anda tidak tahu cara menerapkan metode statis maka tautan ini dapat membantu Anda.
Menurut pendapat saya, Java tidak sama dengan C ++ sama sekali , jika tidak mendukung tipe yang tidak ditandatangani atau overloading operator, jadi saya pikir Java harus diperlakukan sebagai bahasa yang sama sekali berbeda dari C ++ dan dari C.
Ngomong-ngomong, bahasa ini juga sangat berbeda dalam hal bahasa.
Jadi saya tidak merekomendasikan di Java untuk mengetikkan kode yang mirip dengan C dan saya tidak merekomendasikan untuk mengetikkan kode yang mirip dengan C ++ sama sekali, karena di Jawa Anda tidak akan bisa melakukan apa yang ingin Anda lakukan selanjutnya di C ++, yaitu kode tidak akan terus menjadi C ++ sama sekali dan bagi saya ini buruk untuk kode seperti itu, untuk mengubah gaya di tengah.
Saya sarankan untuk menulis dan menggunakan metode statis juga untuk operasi yang ditandatangani, jadi Anda tidak melihat dalam campuran kode operator dan metode statis untuk operasi yang ditandatangani dan tidak ditandatangani, kecuali jika Anda hanya perlu menandatangani operasi dalam kode, dan tidak apa-apa untuk gunakan operator saja.
Juga saya sarankan untuk menghindari menggunakan pendek , int dan panjang tipe primitif, dan penggunaan kata , dword dan QWORD masing-masing sebagai gantinya, dan Anda tentang memanggil metode statis untuk operasi ditandatangani dan / atau menandatangani operasi daripada menggunakan operator.
Jika Anda akan melakukan operasi yang ditandatangani saja dan menggunakan operator hanya dalam kode, maka ini boleh saja untuk menggunakan tipe primitif ini pendek , int dan panjang .
Sebenarnya kata , dword dan QWORD jangan tidak ada dalam bahasa, tetapi Anda dapat membuat kelas baru untuk masing-masing dan pelaksanaan setiap harus sangat mudah:
Kelas kata memegang tipe primitif pendek saja, kelas dword memegang tipe primitif int saja dan kelas QWORD memegang jenis primitif panjang saja. Sekarang semua unsigned dan metode yang ditandatangani sebagai statis atau tidak sebagai pilihan Anda, Anda dapat menerapkan di setiap kelas, yaitu semua operasi 16 bit baik ditandatangani dan ditandatangani dengan memberikan nama makna pada kelas kata , semua operasi 32 bit baik unsigned dan ditandatangani dengan memberikan nama makna pada kelas kata sandi dan semua operasi 64 bit baik ditandatangani dan ditandatangani dengan memberikan nama makna pada kelas kata sandi .
Jika Anda tidak suka memberikan terlalu banyak nama yang berbeda untuk setiap metode, Anda selalu dapat menggunakan kelebihan beban di Jawa, bagus untuk membaca bahwa Java tidak menghapus itu juga!
Jika Anda menginginkan metode alih-alih operator untuk operasi bertanda tangan 8 bit dan metode untuk operasi tanpa tanda tangan 8 bit yang tidak memiliki operator sama sekali, maka Anda dapat membuat kelas Byte (perhatikan bahwa huruf pertama 'B' adalah modal, jadi ini bukan tipe byte primitif ) dan mengimplementasikan metode di kelas ini.
Tentang lewat nilai dan lewat referensi:
Jika saya tidak salah, seperti di C #, benda primitif yang disahkan oleh nilai alamiah, tetapi benda-benda kelas tersebut diteruskan oleh referensi secara alami, sehingga berarti bahwa objek tipe Byte , kata , dword dan QWORD akan dikirimkan dengan referensi dan bukan oleh nilai secara default. Saya berharap Java memiliki objek struct seperti yang dimiliki C #, jadi semua Byte , word , dword , dan qword dapat diimplementasikan menjadi struct, bukan kelas, jadi secara default mereka dilewatkan oleh nilai dan bukan oleh referensi secara default, seperti objek struct apa pun di C #, seperti tipe primitif, dilewatkan oleh nilai dan bukan oleh referensi secara default, tetapi karena Java lebih buruk daripada C # dan kami memiliki untuk mengatasinya, maka hanya ada kelas dan antarmuka, yang dilewatkan oleh referensi dan bukan oleh nilai secara default. Jadi, jika Anda ingin meneruskan objek Byte , word , dword , dan qword dengan nilai dan bukan dengan referensi, seperti objek kelas lainnya di Jawa dan juga dalam C #, Anda harus cukup menggunakan copy constructor dan hanya itu.
Itulah satu-satunya solusi yang dapat saya pikirkan. Saya hanya berharap bahwa saya bisa mengetikkan tipe primitif ke kata, kata dan qword, tetapi Java tidak mendukung typedef atau menggunakan sama sekali, tidak seperti C # yang mendukung penggunaan , yang setara dengan typedef C.
Tentang output:
Untuk urutan bit yang sama , Anda dapat mencetaknya dengan banyak cara: Sebagai biner, sebagai desimal (seperti arti% u dalam C printf), sebagai oktal (seperti arti% o dalam C printf), sebagai heksadesimal (seperti arti% x dalam printf C) dan sebagai integer (seperti arti dari% d dalam printf C).
Perhatikan bahwa C printf tidak tahu tipe variabel yang diteruskan sebagai parameter ke fungsi, jadi printf tahu tipe setiap variabel hanya dari objek char * yang diteruskan ke parameter pertama dari fungsi.
Jadi di masing-masing kelas: Byte , word , dword dan qword , Anda dapat menerapkan metode cetak dan mendapatkan fungsionalitas printf, meskipun tipe primitif dari kelas tersebut ditandatangani, Anda masih dapat mencetaknya sebagai unsigned dengan mengikuti beberapa algoritma yang melibatkan operasi logis dan bergeser untuk mendapatkan digit untuk mencetak ke output.
Sayangnya tautan yang saya berikan kepada Anda tidak menunjukkan cara menerapkan metode cetak ini, tetapi saya yakin Anda dapat google untuk algoritma yang Anda butuhkan untuk menerapkan metode cetak ini.
Hanya itu yang bisa saya jawab pertanyaan Anda dan sarankan Anda.