Saturday, 22 July 2017

C พิมพ์ Int As ไบนารี ตัวเลือก


Im กำลังมองหาฟังก์ชันเพื่อให้ฉันสามารถพิมพ์แทนไบนารีของ int สิ่งที่ฉันได้จนถึงขณะนี้คือ แต่เมื่อฉันเรียกฉันได้รับการส่งออกเช่น 0000000000000000000000000000000000xtpYy (และพวงของตัวอักษรที่ไม่รู้จักมันเป็นข้อบกพร่องในการทำงานหรือฉันพิมพ์ที่อยู่ของอาร์เรย์ตัวอักษรหรือสิ่งที่ขออภัยฉันลาดเทเพียงมองเห็นที่อิ่ม จะผิด NB รหัสมาจากที่นี่ EDIT: ไม่บ้าน FYI ของ im พยายามที่จะแก้ปัญหาคน elses การจัดการภาพประจำในภาษาที่ไม่คุ้นเคยหาก แต่ถูกแท็กเป็นบ้านเพราะแนวคิดพื้นฐานแล้วเล่นยุติธรรมถาม 21 มิถุนายน 09 at 17:42 สตริงของคุณไม่ใช่ null-terminated ตรวจสอบให้แน่ใจว่าคุณเพิ่มอักขระ 0 ตัวที่ท้ายสตริงหรือคุณสามารถจัดสรรด้วย calloc แทน malloc ซึ่งจะเป็นศูนย์หน่วยความจำที่ถูกส่งคืนให้คุณโดยทาง มีปัญหาอื่น ๆ เกี่ยวกับรหัสนี้: เมื่อใช้จะจัดสรรหน่วยความจำเมื่อคุณเรียกมันออกจากผู้โทรรับผิดชอบฟรี () ไอเอ็นจีจัดสรรสายคุณจะรั่วหน่วยความจำถ้าคุณเพียงแค่เรียกมันว่าในสาย printf มันทำให้สองผ่าน มากกว่าจำนวนซึ่งเป็น unne cessary คุณสามารถทำทุกอย่างได้ในลูปเดียว นี่เป็นอีกทางเลือกหนึ่งที่คุณสามารถใช้ได้ พารามิเตอร์ที่สองคือตัวชี้ไปยังบัฟเฟอร์ที่คุณต้องการเก็บสตริงผลลัพธ์ไว้ถ้าคุณไม่มีบัฟเฟอร์คุณสามารถส่งค่า NULL และ int2bin จะเขียนบัฟเฟอร์แบบคงที่และส่งกลับให้กับคุณ ข้อได้เปรียบของการใช้งานครั้งนี้คือผู้โทรไม่ต้องกังวลกับฟรี () สายอักขระที่ส่งคืน ข้อเสียคือ theres บัฟเฟอร์แบบคงที่เดียวเท่านั้นดังนั้นการโทรที่ตามมาจะเป็นการเขียนทับผลลัพธ์จากการโทรก่อนหน้านี้ คุณไม่สามารถบันทึกผลลัพธ์จากการโทรหลายครั้งเพื่อใช้ภายหลังได้ นอกจากนี้ยังไม่ threadsafe ซึ่งหมายความว่าถ้าคุณเรียกใช้ฟังก์ชันด้วยวิธีนี้จากเธรดที่แตกต่างกันพวกเขาสามารถ clobber แต่ละสตริงอื่น ๆ ถ้า thats ความเป็นไปได้ youll ต้องผ่านในบัฟเฟอร์ของคุณเองแทนการผ่าน NULL ชอบตอบ: ตอบ 21 มิ.ย. 09 เวลา 17: 45 แค่พูดถึงหลายสิ่งหลายอย่างเกี่ยวกับการปฏิบัติที่ดี นี้อาจจะง่ายขึ้นโดยรวม แต่ฉันไม่เคยพยายามที่จะมุ่งเน้นที่โดยเฉพาะอย่างยิ่ง ฉันไม่เห็นความจำเป็นในการถ้า (จำนวน 0) โดยเฉพาะอย่างยิ่งเมื่อเทียบกับการแยกวิเคราะห์ () คุณเพียงข้ามการคำนวณต่อไปถ้าผลตอบแทนเป็น 0 ถ้าคุณทำผลลัพธ์ที่ปลายจะไม่ถูกพิมพ์แม้ว่า 0 เป็นตัวเลขที่ถูกต้อง คุณไม่จำเป็นต้องใช้ std :: endl ใน main () ที่ยัง flushes buffer ซึ่งไม่จำเป็นที่นี่และคุณทำมันหลายครั้ง เพียงใช้ n ภายใน print statement คุณสามารถกำหนดได้เหนือ main () ช่วยให้คุณสามารถลบต้นแบบฟังก์ชัน ไม่จำเป็นต้องพารามิเตอร์บรรทัดคำสั่งหลักเท่านั้น () ไม่ เส้นทางการควบคุมและผลตอบแทนของมันไม่สมเหตุสมผลกับฉัน ถ้าคำสั่ง if ถูกเรียกใช้งานจะแสดงข้อความและส่งกลับค่า 0 หากมีการดำเนินการ else จะส่งคืนจำนวนเต็มที่แปลงแล้ว แต่ควรเรียกฟังก์ชันนี้ว่าจะแยกแยะสิ่งใดซึ่งเป็นหน้าที่หลักของมัน ฟังก์ชั่นควรให้ความสำคัญกับสิ่งเดียว ให้รหัสโทรศัพท์ตัดสินใจว่าควรจะเรียกหรือไม่ ไม่มีความจำเป็นในการป้องกันถ้าคุณไม่ได้ใช้มรดก (ผมเชื่อว่าแม้ Bjarne Stroustrup เองก็เสียใจที่เพิ่มคำหลักนั้น) เปลี่ยนเป็นแบบส่วนตัว หรือเพียงลบคำหลักเนื่องจากคลาสเป็นแบบส่วนตัวตามค่าเริ่มต้น หากคุณไม่ได้ดูแลสมาชิกข้อมูลอย่างน้อยหนึ่งรายการโปรแกรมนี้อาจไม่จำเป็นต้องใช้ชั้นเรียน หนึ่งนี้มีฟังก์ชัน แต่ฟังก์ชันระดับควรจะเปลี่ยนสถานะของสมาชิกข้อมูลอย่างน้อยหนึ่งรายการ แต่ฟังก์ชันเหล่านี้อาจเป็นฟังก์ชันฟรี (ไม่ใช่สมาชิก) และชั้นเรียนออกทั้งหมด สามารถทำได้ในคำแถลงเดียวเท่านั้น: ยังดีกว่าเนื่องจาก std :: string สนับสนุน ใช้ที่แทน: ตัวแปรท้องถิ่นใน inttobin () dont ต้องเป็นแบบคงที่ คุณไม่จำเป็นต้องใช้ฟังก์ชันย้อนกลับของคุณเองเพียงแค่ใช้ std :: reverse () เป็น rachet ประหลาดได้กล่าวถึงในความคิดเห็นคุณก็สามารถใช้ std :: hex เพื่อจัดการกับ IO เมื่อแสดงค่านี้ นอกจากนี้คุณสามารถทำสิ่งนี้ได้ด้วยระบบตัวเลขทั้งสามหมายเลข C พิมพ์จำนวนเต็มโปรแกรม c นี้ขอให้ผู้ใช้ป้อนข้อมูลจำนวนเต็มจากนั้นพิมพ์ การป้อนข้อมูลทำได้โดยใช้ฟังก์ชัน scanf และหมายเลขจะถูกพิมพ์ลงบนหน้าจอโดยใช้ printf รหัสการเขียนโปรแกรม C ในภาษา C เรามีชนิดข้อมูลสำหรับชนิดของข้อมูลสำหรับข้อมูลจำนวนเต็มเป็น int สำหรับอักขระวันที่ char สำหรับข้อมูลทศนิยมที่ลอยและอื่น ๆ สำหรับจำนวนเต็มขนาดใหญ่คุณสามารถใช้ชนิดข้อมูลที่ยาวหรือยาวได้ ในการจัดเก็บจำนวนเต็มที่มากกว่า 218-1 ซึ่งเป็นช่วงของข้อมูลที่มีความยาวมาก ๆ คุณสามารถใช้สตริงได้ ในโค้ดด้านล่างเราเก็บจำนวนเต็มไว้ในสตริงแล้วแสดง โปรแกรม C เก็บจำนวนเต็มในสตริงเอาต์พุตของโปรแกรม: ข้อดีของการใช้สตริงคือเราสามารถจัดเก็บจำนวนเต็มขนาดใหญ่ได้มาก ภาษาซีไม่ได้สร้างขึ้นมาเพื่อจัดการกับตัวเลขจำนวนมาก

No comments:

Post a Comment