Câu hỏi của bạn là "Tại sao Java không hỗ trợ ints không dấu"?
Và câu trả lời của tôi cho câu hỏi của bạn là Java muốn rằng tất cả các kiểu nguyên thủy của nó: byte , char , short , int và long phải được coi là byte , word , dword và qword , tương tự như trong lắp ráp và các toán tử Java được ký hoạt động trên tất cả các loại nguyên thủy của nó ngoại trừ char , nhưng chỉ trên char chúng không được ký 16 bit.
Vì vậy, các phương thức tĩnh giả sử là các hoạt động không dấu cũng cho cả 32 và 64 bit.
Bạn cần lớp cuối cùng, có phương thức tĩnh có thể được gọi cho dấu không dấu hoạt động .
Bạn có thể tạo lớp cuối cùng này, gọi nó là bất kỳ tên nào bạn muốn và thực hiện các phương thức tĩnh.
Nếu bạn không biết về cách thực hiện các phương thức tĩnh thì liên kết này có thể giúp bạn.
Theo tôi, Java là không giống với C ++ ở tất cả , nếu nó không hỗ trợ các kiểu unsigned hay khai thác quá tải, vì vậy tôi nghĩ rằng Java phải được coi là ngôn ngữ hoàn toàn khác nhau từ cả hai C ++ và từ C.
Nhân tiện, nó cũng hoàn toàn khác nhau trong tên của các ngôn ngữ.
Vì vậy, tôi không khuyên Java nên nhập mã tương tự như C và tôi không khuyên bạn nên nhập mã tương tự như C ++, vì khi đó trong Java bạn sẽ không thể làm những gì bạn muốn làm tiếp theo trong C ++, tức là mã sẽ không tiếp tục giống như C ++ và đối với tôi, điều này thật tệ khi viết mã như vậy, để thay đổi kiểu ở giữa.
Tôi cũng khuyên bạn nên viết và sử dụng các phương thức tĩnh cho các hoạt động đã ký, vì vậy bạn không thấy trong hỗn hợp mã của các toán tử và phương thức tĩnh cho cả các hoạt động đã ký và không dấu, trừ khi bạn chỉ cần các hoạt động được ký trong mã và không sao cả chỉ sử dụng các toán tử.
Ngoài ra tôi khuyên bạn nên tránh sử dụng các kiểu nguyên thủy ngắn , int và dài , và sử dụng từ , dword và qword tương ứng, và bạn sẽ gọi các phương thức tĩnh cho các hoạt động không dấu và / hoặc các hoạt động được ký thay vì sử dụng các toán tử.
Nếu bạn chỉ thực hiện các hoạt động đã ký và chỉ sử dụng các toán tử trong mã, thì việc sử dụng các kiểu nguyên thủy này ngắn , int và long là ổn .
Trên thực tế từ , DWORD và qword làm không tồn tại trong ngôn ngữ, nhưng bạn có thể tạo lớp mới cho mỗi và việc thực hiện của mỗi nên rất dễ dàng:
Lớp từ nắm giữ các loại nguyên thủy ngắn chỉ, lớp dword giữ kiểu nguyên thủy int chỉ và lớp qword giữ kiểu nguyên thủy dài mà thôi. Bây giờ tất cả các phương thức không dấu và phương thức đã ký là tĩnh hoặc không phải là lựa chọn của bạn, bạn có thể thực hiện trong mỗi lớp, tức là tất cả các hoạt động 16 bit cả không dấu và được ký bằng cách đặt tên ý nghĩa trên lớp từ , tất cả các hoạt động 32 bit đều không dấu và được ký bằng cách đặt tên ý nghĩa trên lớp dword và tất cả các hoạt động 64 bit cả không dấu và được ký bằng cách đặt tên ý nghĩa trên lớp qword .
Nếu bạn không muốn đưa ra quá nhiều tên khác nhau cho mỗi phương thức, bạn luôn có thể sử dụng quá tải trong Java, thật tốt khi đọc rằng Java cũng không loại bỏ điều đó!
Nếu bạn muốn các phương thức thay vì các toán tử cho các hoạt động được ký 8 bit và các phương thức cho các hoạt động không dấu 8 bit hoàn toàn không có toán tử, thì bạn có thể tạo lớp Byte (lưu ý rằng chữ cái đầu tiên 'B' là vốn, vì vậy đây không phải là kiểu byte nguyên thủy ) và thực hiện các phương thức trong lớp này.
Về việc chuyển theo giá trị và chuyển qua tham chiếu:
Nếu tôi không sai, giống như trong C #, các đối tượng nguyên thủy được truyền theo giá trị tự nhiên, nhưng đối tượng lớp được thông qua tham khảo một cách tự nhiên, do đó phương tiện mà đối tượng của kiểu Byte , từ , dword và qword sẽ được thông qua tham khảo và không phải bởi giá trị theo mặc định Tôi ước Java có các đối tượng struct như C #, vì vậy tất cả Byte , word , dword và qword có thể được triển khai thành struct thay vì class, do đó, theo mặc định, chúng được truyền theo giá trị chứ không phải theo tham chiếu theo mặc định, giống như bất kỳ đối tượng cấu trúc nào trong C #, giống như các kiểu nguyên thủy, được truyền theo giá trị và không theo tham chiếu theo mặc định, nhưng vì Java kém hơn C # và chúng tôi có để đối phó với điều đó, sau đó chỉ có các lớp và giao diện, được truyền bằng tham chiếu chứ không phải theo giá trị theo mặc định. Vì vậy, nếu bạn muốn truyền các đối tượng Byte , word , dword và qword theo giá trị chứ không phải bằng tham chiếu, giống như bất kỳ đối tượng lớp nào khác trong Java và cả trong C #, bạn sẽ chỉ cần sử dụng hàm tạo sao chép và đó là nó.
Đó là giải pháp duy nhất mà tôi có thể nghĩ đến. Tôi chỉ ước rằng tôi chỉ có thể gõ các kiểu nguyên thủy thành từ, từ và qword, nhưng Java không hỗ trợ typedef cũng như không sử dụng, không giống như C # hỗ trợ sử dụng , tương đương với typedef của C.
Về đầu ra:
Đối với cùng một chuỗi bit , bạn có thể in chúng theo nhiều cách: Dưới dạng nhị phân, dưới dạng thập phân (như ý nghĩa của% u trong C printf), dưới dạng bát phân (như ý nghĩa của% o trong C printf), dưới dạng thập lục phân (như ý nghĩa của% x trong C printf) và dưới dạng số nguyên (giống như ý nghĩa của% d trong C printf).
Lưu ý rằng C printf không biết loại biến được truyền dưới dạng tham số cho hàm, vì vậy printf chỉ biết loại của từng biến từ đối tượng char * được truyền cho tham số đầu tiên của hàm.
Vì vậy, trong mỗi lớp: Byte , word , dword và qword , bạn có thể thực hiện phương thức in và nhận chức năng của printf, mặc dù kiểu nguyên thủy của lớp được ký, bạn vẫn có thể in dưới dạng không dấu bằng cách tuân theo một số thuật toán liên quan hoạt động logic và dịch chuyển để có được các chữ số để in ra đầu ra.
Thật không may, liên kết tôi đưa cho bạn không chỉ ra cách triển khai các phương thức in này, nhưng tôi chắc chắn rằng bạn có thể google cho các thuật toán bạn cần để thực hiện các phương pháp in này.
Đó là tất cả những gì tôi có thể trả lời câu hỏi của bạn và đề nghị bạn.