คำถามติดแท็ก unsigned

ตัวแปรที่ไม่ได้ลงนามคือตัวแปรที่สามารถแทนตัวเลขที่ไม่เป็นลบเท่านั้น


17
วนซ้ำกว่า std :: vector: ตัวแปรดัชนีที่ไม่ได้ลงชื่อ vs
วิธีที่ถูกต้องในการวนซ้ำเวกเตอร์ใน C ++ คืออะไร? ลองพิจารณาชิ้นส่วนรหัสสองอันนี้อันนี้ใช้ได้ดี: for (unsigned i=0; i < polygon.size(); i++) { sum += polygon[i]; } และอันนี้: for (int i=0; i < polygon.size(); i++) { sum += polygon[i]; } warning: comparison between signed and unsigned integer expressionsซึ่งจะสร้าง ฉันใหม่ในโลกของ C ++ ดังนั้นunsignedตัวแปรที่ดูน่ากลัวสำหรับฉันและฉันรู้ว่าunsignedตัวแปรอาจเป็นอันตรายหากไม่ได้ใช้อย่างถูกต้องดังนั้น - ถูกต้องหรือไม่
470 c++  stl  unsigned  signed 

15
เซ็นชื่อกับจำนวนเต็มที่ไม่ได้ลงนาม
ฉันถูกต้องหรือไม่ที่จะพูดถึงความแตกต่างระหว่างจำนวนเต็มที่ลงชื่อและไม่ได้ลงชื่อคือ: ไม่ได้ลงนามสามารถถือเป็นค่าบวกที่ใหญ่กว่าและไม่มีค่าลบ Unsigned ใช้บิตนำหน้าเป็นส่วนหนึ่งของค่าในขณะที่เวอร์ชันที่เซ็นชื่อใช้บิตซ้ายสุดเพื่อระบุว่าหมายเลขเป็นบวกหรือลบ จำนวนเต็มที่ลงนามแล้วสามารถถือได้ทั้งตัวเลขบวกและลบ ความแตกต่างอื่น ๆ

16
ทำไม Java ไม่สนับสนุน ints ที่ไม่ได้ลงชื่อ?
เหตุใด Java จึงไม่รวมการสนับสนุนสำหรับจำนวนเต็มที่ไม่มีเครื่องหมาย? ดูเหมือนว่าฉันจะไม่สนใจคี่เพราะพวกเขาอนุญาตให้หนึ่งเขียนรหัสที่มีโอกาสน้อยที่จะผลิตล้นในการป้อนข้อมูลขนาดใหญ่โดยไม่คาดคิด นอกจากนี้การใช้จำนวนเต็มที่ไม่ได้ลงนามอาจเป็นรูปแบบของเอกสารตนเองเนื่องจากพวกเขาระบุว่าค่าที่ int ที่ไม่ได้ลงชื่อซึ่งมีไว้เพื่อถือนั้นไม่ควรจะเป็นค่าลบ สุดท้ายในบางกรณีจำนวนเต็มที่ไม่ได้ลงชื่ออาจมีประสิทธิภาพมากกว่าสำหรับการดำเนินการบางอย่างเช่นการแบ่ง ข้อเสียของการรวมสิ่งเหล่านี้คืออะไร?

8
วิธีการพิมพ์“ ไม่ได้ลงนามนาน” ใน C?
ฉันไม่สามารถเข้าใจวิธีการพิมพ์ unsigned longประเภทข้อมูลใน C สมมติว่าunsigned_fooเป็นunsigned longแล้วฉันลอง: printf("%lu\n", unsigned_foo) printf("%du\n", unsigned_foo) printf("%ud\n", unsigned_foo) printf("%ll\n", unsigned_foo) printf("%ld\n", unsigned_foo) printf("%dl\n", unsigned_foo) และพวกเขาทั้งหมดพิมพ์-123123123หมายเลขบางชนิดแทนที่unsigned longฉันมี

11
ประกาศ int ที่ไม่ได้ลงนามใน Java
มีวิธีการประกาศ int ไม่ได้ลงนามใน Java? หรือคำถามอาจมีกรอบเช่นนี้เช่นกัน: อะไรคือ Java เทียบเท่าของไม่ได้ลงนาม? เพียงแค่จะบอกคุณบริบทที่ผมกำลังมองไปที่การใช้ Java String.hashcode()ของ ฉันต้องการทดสอบความเป็นไปได้ของการชนถ้าจำนวนเต็มเป็น 32 ที่ไม่ได้ลงนาม int
316 java  integer  unsigned 

16
เราสามารถสร้างไบต์ที่ไม่ได้ลงนามใน Java
ฉันพยายามแปลงไบต์ที่ลงนามแล้วในแบบไม่ได้ลงชื่อ ปัญหาคือข้อมูลที่ฉันได้รับไม่ได้ลงนามและ Java ไม่รองรับไบต์ที่ไม่ได้ลงนามดังนั้นเมื่อมันอ่านข้อมูลที่ถือว่าเป็นข้อมูลที่ลงนามแล้ว ฉันพยายามแปลงมันด้วยวิธีแก้ปัญหาต่อไปนี้ที่ฉันได้รับจาก Stack Overflow public static int unsignedToBytes(byte a) { int b = a & 0xFF; return b; } แต่เมื่อมันถูกแปลงเป็นไบต์อีกครั้งฉันจะได้รับข้อมูลที่เซ็นชื่อเหมือนกัน ฉันกำลังพยายามใช้ข้อมูลนี้เป็นพารามิเตอร์ของฟังก์ชันของ Java ที่ยอมรับเฉพาะไบต์เป็นพารามิเตอร์ดังนั้นฉันจึงไม่สามารถใช้ชนิดข้อมูลอื่นได้ ฉันจะแก้ไขปัญหานี้ได้อย่างไร
185 java  unsigned 

12
เหตุใด C จึงไม่มีลอยที่ไม่ได้ลงชื่อ
ฉันรู้ว่าคำถามดูเหมือนจะแปลก โปรแกรมเมอร์บางครั้งก็คิดมากเกินไป โปรดอ่านต่อ ... ใน CI ใช้signedและunsignedจำนวนเต็มมาก ฉันชอบข้อเท็จจริงที่ว่าคอมไพลเลอร์เตือนฉันหากฉันทำสิ่งต่างๆเช่นการกำหนดจำนวนเต็มที่เซ็นชื่อให้กับตัวแปรที่ไม่ได้ลงชื่อ ฉันได้รับคำเตือนหากเปรียบเทียบเซ็นกับจำนวนเต็มที่ไม่ได้ลงชื่อและอื่น ๆ อีกมากมาย ฉันชอบคำเตือนเหล่านี้ พวกเขาช่วยฉันรักษารหัสของฉันให้ถูกต้อง ทำไมเราไม่มีความหรูหราเหมือนกันสำหรับลอย? รากที่สองจะไม่ส่งกลับจำนวนลบอย่างแน่นอน มีสถานที่อื่น ๆ เช่นกันที่ค่าการลอยตัวเชิงลบไม่มีความหมาย ตัวเลือกที่สมบูรณ์แบบสำหรับการลอยตัวที่ไม่ได้ลงนาม Btw - ฉันไม่ค่อยสนใจเกี่ยวกับความแม่นยำพิเศษเพียงเล็กน้อยที่ฉันจะได้รับโดยการลบบิตเครื่องหมายออกจากโฟลต ฉันมีความสุขมากกับfloatพวกเขาในขณะนี้ ฉันแค่อยากจะทำเครื่องหมายลอยว่าไม่ได้ลงนามในบางครั้งและรับคำเตือนแบบเดียวกับที่ฉันได้รับจากจำนวนเต็ม ฉันไม่ทราบภาษาโปรแกรมใด ๆ ที่รองรับตัวเลขทศนิยมที่ไม่ได้ลงชื่อ มีความคิดว่าทำไมพวกเขาถึงไม่มี? แก้ไข: ฉันรู้ว่า x87 FPU ไม่มีคำแนะนำในการจัดการกับการลอยตัวที่ไม่ได้ลงชื่อ ให้ใช้คำแนะนำลอยที่ลงนาม การใช้ผิดประเภท (เช่นต่ำกว่าศูนย์) อาจถือได้ว่าเป็นพฤติกรรมที่ไม่ได้กำหนดในลักษณะเดียวกับที่ไม่มีการกำหนดจำนวนเต็มที่มีการลงนามมากเกินไป


7
ความแตกต่างระหว่าง size_t และ int ที่ไม่ได้ลงชื่อ
ฉันสับสนเกี่ยวกับsize_t. ฉันได้ค้นหาบนอินเทอร์เน็ตและทุกที่ที่กล่าวถึงว่าsize_tเป็นประเภทที่ไม่ได้ลงนามดังนั้นจึงสามารถแสดงได้เฉพาะค่าที่ไม่เป็นลบ คำถามแรกของฉันคือถ้ามันถูกใช้เพื่อแสดงเฉพาะค่าที่ไม่ใช่ค่าลบทำไมเราไม่ใช้unsigned intแทนsize_t? คำถามที่สองของฉันคือsize_tและunsigned intใช้แทนกันได้หรือไม่? ถ้าไม่แล้วทำไม? และใครช่วยให้ฉันเป็นตัวอย่างที่ดีsize_tและสั้น ๆ เกี่ยวกับการทำงานของมัน?
109 c  types  unsigned 

10
Java เทียบเท่ากับ long long ที่ไม่ได้ลงนาม?
ใน C ++ ฉันสนุกกับการเข้าถึงจำนวนเต็ม 64 บิตที่ไม่ได้ลงชื่อผ่านunsigned long long intหรือผ่านuint64_tหรือผ่านทางตอนนี้ใน Java longs คือ 64 บิตฉันรู้แล้ว อย่างไรก็ตามพวกเขามีการลงนาม มี long (long) ที่ไม่ได้ลงนามเป็น Java แบบดั้งเดิมหรือไม่? ฉันจะใช้มันได้อย่างไร?

4
การลบจำนวนเต็มไม่ได้ลงนามกำหนดพฤติกรรมหรือไม่
ฉันเจอรหัสจากใครบางคนที่ดูเหมือนจะเชื่อว่ามีปัญหาในการลบจำนวนเต็มที่ไม่ได้ลงชื่อออกจากจำนวนเต็มอื่นที่เป็นประเภทเดียวกันเมื่อผลลัพธ์เป็นลบ ดังนั้นรหัสแบบนี้จะไม่ถูกต้องแม้ว่าจะใช้งานได้กับสถาปัตยกรรมส่วนใหญ่ก็ตาม unsigned int To, Tf; To = getcounter(); while (1) { Tf = getcounter(); if ((Tf-To) >= TIME_LIMIT) { break; } } นี่เป็นเพียงคำพูดที่เกี่ยวข้องอย่างคลุมเครือจากมาตรฐาน C ที่ฉันหาได้ การคำนวณที่เกี่ยวข้องกับตัวถูกดำเนินการที่ไม่ได้ลงนามไม่สามารถเกิน fl โอ๊ยได้เนื่องจากผลลัพธ์ที่ไม่สามารถแสดงโดยประเภทจำนวนเต็มที่ไม่ได้ลงนามที่เป็นผลลัพธ์จะลดโมดูโลจำนวนที่มากกว่าค่าที่มากที่สุดค่าหนึ่งที่สามารถแสดงโดยประเภทผลลัพธ์ได้ ฉันคิดว่าอาจใช้คำพูดนั้นเพื่อหมายความว่าเมื่อตัวถูกดำเนินการด้านขวามีขนาดใหญ่ขึ้นการดำเนินการจะถูกปรับให้มีความหมายในบริบทของตัวเลขที่ถูกตัดทอนโมดูโล กล่าวคือ 0x0000 - 0x0001 == 0x 1 0000 - 0x0001 == 0xFFFF เมื่อเทียบกับการใช้ความหมายที่ลงนามขึ้นอยู่กับการใช้งาน: 0x0000 - 0x0001 == (ไม่ได้ลงนาม) (0 + …

2
เหตุใด std :: ssize () จึงถูกนำมาใช้ใน C ++ 20
C ++ 20แนะนำstd::ssize()ฟังก์ชันฟรีดังต่อไปนี้: template <class C> constexpr auto ssize(const C& c) -> std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(c.size())>>; ดูเหมือนการใช้งานที่เป็นไปได้จะใช้static_castเพื่อแปลงค่าส่งคืนของsize()ฟังก์ชันสมาชิกของ cl ass Cเป็นคู่ที่ลงนาม เนื่องจากsize()ฟังก์ชันสมาชิกของ C จะส่งกลับค่าที่ไม่ใช่ค่าลบเสมอเหตุใดใคร ๆ จึงต้องการเก็บไว้ในตัวแปรที่ลงชื่อ static_castในกรณีที่ต้องการจริงๆมันเป็นเรื่องของความเรียบง่าย เหตุใดจึงถูกstd::ssize()นำมาใช้ใน C ++ 20
101 c++  stl  unsigned  signed  c++20 

7
ประเภทข้อมูลที่ไม่ได้ลงชื่อคืออะไร
ฉันเคยเห็นunsignedประเภท "ไร้ประเภท" นี้มาแล้วสองสามครั้ง แต่ไม่เคยเห็นคำอธิบาย ฉันคิดว่ามีsignedประเภทที่เกี่ยวข้อง นี่คือตัวอย่าง: static unsigned long next = 1; /* RAND_MAX assumed to be 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned)(next/65536) % 32768); } void mysrand(unsigned seed) { next = seed; } สิ่งที่ฉันรวบรวมมาจนถึงตอนนี้: - ในระบบของฉันsizeof(unsigned) = 4(บอกใบ้ int ที่ไม่ได้ลงนาม 32 บิต) …
93 c  types  unsigned 

5
คำหลักที่ไม่ได้ลงนามใน C ++
คำหลักที่ไม่ได้ลงชื่อเริ่มต้นเป็นชนิดข้อมูลเฉพาะใน C ++ หรือไม่ ฉันกำลังพยายามเขียนฟังก์ชันสำหรับคลาสสำหรับต้นแบบ: unsigned Rotate(unsigned object, int count) แต่ฉันไม่เข้าใจความunsignedหมายจริงๆ มันไม่ควรเหมือนunsigned intหรืออะไร?
88 c++  unsigned 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.