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


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 ใช้บิตนำหน้าเป็นส่วนหนึ่งของค่าในขณะที่เวอร์ชันที่เซ็นชื่อใช้บิตซ้ายสุดเพื่อระบุว่าหมายเลขเป็นบวกหรือลบ จำนวนเต็มที่ลงนามแล้วสามารถถือได้ทั้งตัวเลขบวกและลบ ความแตกต่างอื่น ๆ

6
ทำไมเป็น 0 <-0x80000000
ฉันมีโปรแกรมง่ายๆด้านล่าง: #include &lt;stdio.h&gt; #define INT32_MIN (-0x80000000) int main(void) { long long bal = 0; if(bal &lt; INT32_MIN ) { printf("Failed!!!"); } else { printf("Success!!!"); } return 0; } เงื่อนไขif(bal &lt; INT32_MIN )เป็นจริงเสมอ มันเป็นไปได้ยังไงกัน? มันทำงานได้ดีถ้าฉันเปลี่ยนแมโครเป็น: #define INT32_MIN (-2147483648L) ใครสามารถชี้ให้เห็นปัญหา

7
ถ่านมีการเซ็นชื่อหรือไม่ได้ลงนามโดยค่าเริ่มต้น?
ในหนังสือ "Complete Reference of C" ได้มีการกล่าวไว้ว่า charเป็นค่าเริ่มต้นที่ไม่ได้ลงชื่อ แต่ฉันพยายามที่จะตรวจสอบกับ GCC และ Visual Studio มันคือการเป็นลงนามโดยค่าเริ่มต้น อันไหนที่ถูก?
158 c  types  char  signed 

11
~ x + ~ y == ~ (x + y) เป็นเท็จเสมอหรือไม่
รหัสนี้ประเมินว่าเป็นเท็จเสมอหรือไม่ ตัวแปรทั้งสองเป็นส่วนเสริมที่มีการลงนามของทั้งสอง ~x + ~y == ~(x + y) ฉันรู้สึกว่าควรมีจำนวนที่ตรงกับเงื่อนไข ฉันลองทดสอบตัวเลขระหว่าง-5000และ5000ไม่เคยประสบความเท่าเทียมกัน มีวิธีการตั้งค่าสมการเพื่อหาคำตอบให้กับเงื่อนไขหรือไม่? การสลับหนึ่งรายการสำหรับอีกรายการหนึ่งจะทำให้เกิดข้อบกพร่องที่ร้ายกาจในโปรแกรมของฉันหรือไม่

9
C ++ แปลงสตริงฐานสิบหกเป็นจำนวนเต็มที่ลงนาม
ฉันต้องการแปลงสตริงฐานสิบหกเป็นจำนวนเต็ม 32 บิตเซ็นชื่อใน C ++ ตัวอย่างเช่นฉันมีสตริงเลขฐานสิบหก "fffefffe" การแทนค่าฐานสองของสิ่งนี้คือ 11111111111111101111111111111110 การแสดงเลขจำนวนเต็มที่มีลายเซ็นคือ: -65538 ฉันจะแปลงนี้ใน C ++ ได้อย่างไร สิ่งนี้จำเป็นต้องใช้กับตัวเลขที่ไม่เป็นลบ ตัวอย่างเช่นสตริงเลขฐานสิบหก "0000000A" ซึ่งเป็น 00000000000000000000000000001010 เป็นเลขฐานสองและ 10 ในฐานสิบ
137 c++  integer  hex  signed 


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

5
การเปรียบเทียบที่ลงชื่อ / ไม่ได้ลงนาม
ฉันพยายามทำความเข้าใจว่าเหตุใดรหัสต่อไปนี้จึงไม่ออกคำเตือนในสถานที่ที่ระบุ //from limits.h #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ /* = 0x7fffffff */ int a = INT_MAX; //_int64 a = INT_MAX; // makes all warnings go away unsigned int b = UINT_MAX; bool c = false; if(a &lt; …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.