คำถามของคุณคือ "ทำไม Java จึงไม่สนับสนุน ints ที่ไม่ได้ลงชื่อ"?
และคำตอบของฉันสำหรับคำถามของคุณคือ Java ต้องการให้มันเป็นประเภทดั้งเดิมทั้งหมด: ไบต์ , ถ่าน , สั้น , intและlongควรถือว่าเป็นbyte , word , dwordและqwordตามลำดับเหมือนกับในชุดประกอบและตัวดำเนินการ Java ถูกลงนามการดำเนินงานในทุกประเภทของมันดั้งเดิมยกเว้นถ่านแต่เฉพาะถ่านพวกเขาจะไม่ได้ลงชื่อ 16 บิตเท่านั้น
ดังนั้นวิธีการคงที่ควรจะเป็นการดำเนินการที่ไม่ได้ลงนามด้วยสำหรับทั้ง 32 และ 64 บิต
คุณต้องการคลาสสุดท้ายซึ่งสามารถเรียกเมธอดแบบสแตติกสำหรับผู้ที่ไม่ได้ลงชื่อดำเนินการที่
คุณสามารถสร้างคลาสสุดท้ายนี้เรียกมันว่าชื่ออะไรก็ได้ที่คุณต้องการและใช้มันเป็นวิธีการคงที่
หากคุณไม่มีความคิดเกี่ยวกับวิธีการใช้วิธีการคงที่แล้วลิงค์นี้อาจช่วยคุณได้
ในความคิดของฉัน Java ไม่เหมือนกับ C ++ เลยถ้ามันไม่สนับสนุนประเภทที่ไม่ได้ลงนามหรือโอเวอร์โหลดตัวดำเนินการดังนั้นฉันคิดว่า Java ควรถือว่าเป็นภาษาที่แตกต่างจาก C ++ และ C
นอกจากนี้ยังแตกต่างอย่างสิ้นเชิงในชื่อของภาษาโดยวิธี
ดังนั้นฉันไม่แนะนำใน Java ให้พิมพ์รหัสคล้ายกับ C และฉันไม่แนะนำให้พิมพ์รหัสคล้ายกับ C ++ เลยเพราะใน Java คุณจะไม่สามารถทำสิ่งที่คุณต้องการทำต่อไปใน C ++ เช่นรหัสจะไม่เป็นแบบ C ++ ต่อไปและสำหรับฉันนี่เป็นสิ่งที่ไม่ดีสำหรับรหัสเช่นนั้นหากต้องการเปลี่ยนสไตล์ที่อยู่ตรงกลาง
ฉันขอแนะนำให้เขียนและใช้วิธีการแบบสแตติกสำหรับการดำเนินการที่ลงชื่อดังนั้นคุณไม่เห็นในการผสมรหัสของตัวดำเนินการและวิธีการแบบคงที่สำหรับการดำเนินการที่ลงนามและไม่ได้ลงนามเว้นแต่ว่าคุณต้องการเพียงการดำเนินการลงนามในรหัส ใช้โอเปอเรเตอร์เท่านั้น
นอกจากนี้ฉันขอแนะนำให้หลีกเลี่ยงการใช้สั้น , intและยาวดั้งเดิมและใช้word , dwordและqwordตามลำดับแทนและคุณกำลังจะเรียกวิธีการคงที่สำหรับการดำเนินการที่ไม่ได้ลงชื่อและ / หรือการดำเนินการที่ลงนามแทนการใช้ตัวดำเนินการ
หากคุณกำลังจะทำการดำเนินการที่ลงนามเท่านั้นและใช้ตัวดำเนินการเฉพาะในรหัสนี่ก็โอเคที่จะใช้ประเภทดั้งเดิมเหล่านี้ สั้น , intและยาว
อันที่จริงคำ , dwordและqword ไม่ได้ทำมีอยู่ในภาษา แต่คุณสามารถสร้างคลาสใหม่สำหรับแต่ละและการดำเนินงานของแต่ละคนควรจะเป็นเรื่องง่ายมาก:
ชั้นคำถือชนิดดั้งเดิมสั้นเพียงชั้นDWORDถือชนิดดั้งเดิมintเท่านั้นและชั้นqwordถือชนิดดั้งเดิมยาวเท่านั้น ขณะนี้วิธีการที่ไม่ได้ลงนามและที่ลงนามเป็นแบบคงที่หรือไม่เป็นทางเลือกของคุณคุณสามารถใช้ในแต่ละชั้นเรียนเช่นการดำเนินการ 16 บิตทั้งที่ไม่ได้ลงชื่อและลงนามโดยให้ชื่อที่มีความหมายกับคลาสคำลงนามโดยการให้ชื่อความหมายกับคลาสdwordและการดำเนินการ 64 บิตทั้งที่ไม่ได้ลงชื่อและลงนามโดยให้ชื่อความหมายกับคลาสqword
หากคุณไม่ต้องการให้ชื่อแตกต่างกันมากเกินไปสำหรับแต่ละวิธีคุณสามารถใช้การโหลดมากเกินไปใน Java และดีที่จะอ่านว่า Java ไม่ได้ลบมันด้วย!
หากคุณต้องการวิธีการแทนตัวดำเนินการสำหรับการดำเนินการที่ลงชื่อ 8 บิตและวิธีการสำหรับการดำเนินการที่ไม่มีเครื่องหมาย 8 บิตที่ไม่มีตัวดำเนินการเลยคุณสามารถสร้างคลาสByte (โปรดทราบว่าอักษรตัวแรก 'B' เป็นตัวพิมพ์ใหญ่ ดั้งเดิมประเภทไบต์ ) และใช้วิธีการในชั้นนี้
เกี่ยวกับการส่งผ่านค่าและผ่านการอ้างอิง:
หากฉันไม่ผิดเช่นใน C # วัตถุดั้งเดิมจะถูกส่งผ่านตามค่าตามธรรมชาติ แต่คลาสอ็อบเจ็กต์จะถูกส่งผ่านโดยการอ้างอิงตามธรรมชาติดังนั้นหมายความว่าวัตถุประเภทByte , word , dwordและqwordจะถูกส่งผ่านโดยการอ้างอิงไม่ใช่ตามค่า โดยค่าเริ่มต้น. ฉันหวังว่า Java มีstructวัตถุเป็น C # มีดังนั้นสิ่งไบต์ , คำ , DWORDและqwordสามารถดำเนินการให้เป็นstructแทนระดับดังนั้นโดยค่าเริ่มต้นพวกเขาถูกส่งผ่านโดยค่าและไม่ใช่โดยการอ้างอิงโดยค่าเริ่มต้นเช่นวัตถุ struct ใด ๆ ใน C # เช่นประเภทดั้งเดิมจะถูกส่งผ่านโดยค่าและไม่โดยอ้างอิงโดยค่าเริ่มต้น แต่เพราะ Java นั้นเลวร้ายยิ่งกว่า C # และเรา เพื่อจัดการกับสิ่งนั้นมีเพียงคลาสและอินเตอร์เฟสที่ถูกส่งผ่านโดยการอ้างอิงไม่ใช่ตามค่าเริ่มต้น ดังนั้นหากคุณต้องการผ่านByte , word , dwordและ qwordตามค่าและไม่ใช่โดยการอ้างอิงเช่น object class อื่น ๆ ใน Java และใน C # คุณจะต้องใช้ตัวสร้าง copy และนั่นคือมัน
นั่นเป็นทางออกเดียวที่ฉันคิดได้ ฉันแค่หวังว่าฉันจะสามารถพิมพ์ชนิดดั้งเดิมเป็น word, dword และ qword ได้ แต่ Java ไม่รองรับ typedef หรือใช้เลยเหมือน C # ที่รองรับใช้ซึ่งเทียบเท่ากับ typedef ของ C
เกี่ยวกับผลลัพธ์:
สำหรับลำดับของบิตเดียวกันเดียวกันคุณสามารถพิมพ์ได้หลายวิธี: ในฐานะไบนารีเป็นทศนิยม (เช่นความหมายของ% u ใน C printf) เป็นฐานแปด (เช่นความหมายของ% o ใน C printf) เป็นเลขฐานสิบหก (เช่น ความหมายของ% x ใน C printf) และเป็นจำนวนเต็ม (เช่นความหมายของ% d ใน C printf)
โปรดทราบว่า C printf ไม่ทราบชนิดของตัวแปรที่ส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชันดังนั้น printf จึงรู้ประเภทของตัวแปรแต่ละตัวจากออบเจ็กต์ char * ที่ส่งไปยังพารามิเตอร์แรกของฟังก์ชัน
ดังนั้นในแต่ละชั้นเรียน: Byte , word , dwordและqwordคุณสามารถใช้วิธีการพิมพ์และรับฟังก์ชั่นการทำงานของ printf แม้ว่าการลงนามในชั้นเรียนแบบดั้งเดิมจะยังคงไม่ได้ลงนามโดยทำตามขั้นตอนวิธีที่เกี่ยวข้อง การดำเนินการทางตรรกะและ shift เพื่อรับตัวเลขเพื่อพิมพ์ไปยังเอาต์พุต
น่าเสียดายที่ลิงค์ที่ฉันให้คุณไม่ได้แสดงวิธีการใช้วิธีการพิมพ์เหล่านี้ แต่ฉันแน่ใจว่าคุณสามารถ google สำหรับอัลกอริทึมที่คุณต้องใช้วิธีการพิมพ์เหล่านี้
นั่นคือทั้งหมดที่ฉันสามารถตอบคำถามของคุณและแนะนำคุณ