ค่าสูงสุดสำหรับ int32 คืออะไร


1380

ฉันไม่สามารถจำหมายเลขได้ ฉันต้องการกฎหน่วยความจำ


48
ไม่ได้ลงชื่อ: 2³²-1 = 4 ·1024³-1; เซ็นชื่อ: -2³¹ .. +2³¹-1 เนื่องจากบิตเครื่องหมายเป็นบิตสูงสุด เพียงแค่เรียนรู้2⁰ = 1 ถึง2¹⁰ = 1024 และรวมกัน 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad

31
ฉันมักจะจำได้ว่าทุก ๆ 3 บิตเป็นเลขทศนิยม นี่ทำให้ฉันมีขนาดที่ถูกต้อง: 32 บิตคือ 10 หลัก
Barmar

8
@JoachimSauer มันสามารถช่วยแก้จุดบกพร่องได้หากคุณเรียนรู้ที่จะจำหมายเลขเหล่านี้ได้อย่างน้อย
Dunaril

72
"หากดิสก์เต็มการลบ mbytes ทั้งหมดจะเก็บถาวร" (2 ตัวอักษร 1 ตัวอักษร 4 ตัวอักษร 7 ตัวอักษร 4 ตัวอักษร 8 ตัวอักษร 3 ตัวอักษร 6 ตัวอักษร 4 ตัวอักษร 7 ตัวอักษร)
UltraCommit

8
กรณีเมื่อ int32 ไม่เพียงพอ: bbc.com/news/world-asia-30288542
ingaham

คำตอบ:


5073

มันคือ 2,147,483,647 วิธีที่ง่ายที่สุดในการจดจำมันคือผ่านรอยสัก


83
ตัวช่วยจำของฉัน: 2 ^ 10 อยู่ใกล้มากถึง 1,000 ดังนั้น 2 ^ (3 * 10) คือ 1,000 ^ 3 หรือประมาณ 1 พันล้าน หนึ่งใน 32 บิตใช้สำหรับลงชื่อดังนั้นค่าสูงสุดคือจริงๆเพียง 2 ^ 31 ซึ่งเป็นจำนวนเงินที่คุณได้รับประมาณ 2 เท่าสำหรับ 2 ^ (3 * 10): 2 พันล้าน
16807

164
2147483647 ไม่มีเครื่องหมายจุลภาค
Vern D.

20
ใช้เพียง: Integer.MAX_VALUEใน Java
ทิม

184
หากคุณได้รับรอยสักบนใบหน้าของคุณอย่าลืมที่จะย้อนกลับเพื่อให้มันอ่านอย่างถูกต้องในกระจก มิฉะนั้นคุณจะเห็น 746,384,741,2 ซึ่งผิดและน่าอับอาย
Larry S

127
2,147,483,647 = 0x7FFFFFFF หากคุณต้องการจดจำให้ใช้ hex
roottraveller

493

Int32.MaxValueคำตอบที่ถูกต้องที่สุดที่ฉันสามารถคิดเป็น


18
ก่อนหน้านี้มีอยู่ฉันเคย #define INT32_MIN และ INT32_MAX ในโครงการของฉันทั้งหมด
WildJoe

45
@CamiloMartin เฮ้ ฉันไม่พอใจที่ ไม่มีที่สำหรับรอยสักอีกต่อไปแล้ว เห็นได้ชัดว่า ISO-8859-1 charset และพี่ 31415 ทศนิยมจะต้องได้รับความสำคัญ
sehe

3
เมื่อคุณเขียนโปรแกรม: ใช่ในกรณี 99% แต่คุณอาจต้องการที่จะรู้ว่ามันเป็นอะไรประมาณ ~ 2 พันล้านการวางแผนวิธีการเขียนโปรแกรมหรือเมื่อทำงานกับข้อมูลแม้ว่ามันจะมีจำนวนมาก :)
Andre Figueiredo

@sehe ไม่ใช่ latin1 / Windows 1252 ล้าสมัยแล้วหรือยัง ถ้ามันไม่พอดีกับขนาด 7 ไบต์ของ ASCII ฉันไม่คิดว่ามันสมควรที่จะอยู่ในหน่วยความจำหลัก ฉันหมายถึง ... โค้ดเพจของ UNICODE ทั้งหมดนั้นมีประโยชน์มาก แต่พื้นที่ผิวมากกว่าหนึ่งเมกะไบต์ดูเหมือนจะสิ้นเปลือง (ไม่พูดถึงมันยังไม่รวมถึงร่ายมนตร์บรรยายสำหรับ "pageup / pagedown" หรือ "pagehome / pageend")

1
สถานที่ให้บริการนี้อาจเป็นคำแนะนำที่ดีนอกจากนี้การพูดถึงหมายเลขที่ถูกต้อง แต่ผมไม่ชอบคำตอบนี้เป็นเพียงการกล่าวถึงวิธี unportable ของ dertermining ค่าและมันก็ไม่ได้พูดถึงที่เขียนโปรแกรมภาษานี้เป็นผลงานทั้ง ...
mozzbozz

439

หากคุณคิดว่าค่านี้จำยากเกินไปในฐาน 10 ให้ลองฐาน 2: 1111111111111111111111111111111111111


145
@Nick Whaley: ไม่ 111111111111111111111111111111111 นั้นเป็นบวก 1111111111111111111111111111111111 จะเป็นค่าลบ :-)
Curd

58
ฐาน 16 มันง่ายยิ่งขึ้น 7FFFFFFF
Nelson Galdeman Graziano

34
@Curd 11111111111111111111111111111111เป็นเลขฐาน 2 จะยังคงเป็นบวก(เป็นเชิงลบเช่นในฐานที่ 2 จะเป็น-1 ) ลำดับของบิตนั้นเป็นลบหากแสดงถึงจำนวนประกอบ 32 บิต 2 เท่านั้น :)
BlueRaja - Danny Pflughoeft

143
ง่ายที่สุดในการจดจำจะเป็นฐาน 2,147,483,647 สิ่งที่คุณต้องจำคือ 1
big_tommy_7bb

82
@ tim_barber_7BB จริง ๆ แล้วมันคือ 10
fscheidl

317

หากคุณสามารถจำหมายเลข Pi ทั้งหมดได้ดังนั้นหมายเลขที่คุณกำลังค้นหาอยู่ที่ตำแหน่ง 1,867,996,680 ถึง 1,867,996,689 ของตัวเลขทศนิยมของ Pi

สตริงที่เป็นตัวเลข 2147483647 จะปรากฏที่เลขทศนิยม 1,867,996,680 ของ Pi 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

แหล่งที่มา: http://www.subidiom.com/pi/


30
คุณรู้ไหมว่าเมื่อฉันเริ่มอ่านคำตอบของคุณฉันคาดหวังว่าจะมีบางสิ่งที่ใช้งานได้จริงเช่นหลักที่ 20
JqueryToAddNumbers

95
มันดูเท่ห์ดี คุณมีกฎความจำอื่นที่ต้องจำ 1,867,996,680 ไหม ฉันคิดว่ามันยากที่จะจำว่าดัชนีใดที่จะเริ่มมอง ....
Alderath

10
" ถ้าคุณจำหมายเลข Pi ทั้งหมดได้ ... " - ไม่คุณทำไม่ได้มันไม่มีเหตุผล {อาจเป็นหนึ่งหรือสองโพสต์ในคำถาม & คำตอบนี้ 8-D
SlySven

10
@Alderath ฉันมักจะจำได้ว่ามันเป็น 10 ทศนิยมใน sqrt (2) เริ่มต้นที่จำนวน 380,630,713 บาท ....
เฮนริก

2
@Alderath: สตริงตัวเลข 1867996680 ปรากฏขึ้นที่เลขทศนิยม 380,630,713rd ของสแควร์รูทของ 2
Yair Halberstadt

290

เป็น 10 หลักดังนั้นสมมติว่าเป็นหมายเลขโทรศัพท์ (สมมติว่าคุณอยู่ในสหรัฐฯ) 214-748-3647 ฉันไม่แนะนำให้เรียกมัน


13
เมื่อพูดถึงการจำหมายเลขโทรศัพท์ดูเหมือนว่าอาจมีผู้ส่งสแปมทางโทรศัพท์ใช้อยู่: mrnumber.com/1-214-748-3647
Steven

8
"ไม่มีการแลกเปลี่ยน" 748 "ในดัลลัสหมายเลขนี้เป็นของปลอม" - จากหน้าเชื่อมโยงโดย shambleh
Tarnay Kálmán

104
@Steven ฉันไม่คิดว่าพวกเขาเป็นผู้ส่งอีเมลขยะเพียงแค่คนที่ตั้งใจจัดเก็บหมายเลขโทรศัพท์INTแทนที่จะเป็นVARCHARใน MySQL
Zarel

8
พยายามเรียกมัน มันดังขึ้นสองสามครั้งจากนั้นก็ไปที่เสียงโทรผิดพลาด = (
Krythic

172

แทนที่จะคิดว่ามันเป็นตัวเลขขนาดใหญ่ลองทำลายมันและมองหาแนวคิดที่เกี่ยวข้องเช่น:

  • 2 การหยุดพักสนุกเกอร์สูงสุด (การหยุดพักสูงสุดคือ 147)
  • 4 ปี (48 เดือน)
  • 3 ปี (36 เดือน)
  • 4 ปี (48 เดือน)

ด้านบนใช้กับจำนวนลบมากที่สุด บวกคือลบหนึ่ง

บางทีรายละเอียดข้างต้นอาจไม่น่าจดจำสำหรับคุณ (มันแทบจะไม่น่าตื่นเต้นสำหรับมัน!) แต่หวังว่าคุณจะได้รับความคิดที่มี!


99
นั่นเป็นหนึ่งในอุปกรณ์ mneumonic ที่ซับซ้อนที่สุดที่ฉันเคยเห็น ประทับใจ
Ben Hoffstein

9
Heh ชอบของ Derren Brown จริง ๆ สนับสนุนวิธีนี้ - แบ่งตัวเลขลงในสิ่งที่สุ่ม แต่ whieh น่าจดจำยิ่งกว่าโหลดจำนวน: channel4.com/entertainment/tv/microsites/M/mindcontrol/remember/ ......
ลุคเบนเน็ตต์

19
ฉันมีตัวช่วยจำที่ดีกว่า: ทั้งหมดที่คุณต้องจำคือ 2 และ 31 ตามที่เห็นได้ชัดว่าเป็น 2 ^ 31! โอ้รอ ...
Tamas Czinege

28
@DrJokepu ผมไม่แน่ใจว่าเกี่ยวกับความสำคัญผู้ประกอบการ ... หมายความว่า2^(31!)หรือ(2^31)!?
Alderath

1
@Lucio โปรดทราบว่าคำตอบของฉันเกี่ยวข้องในตัวอย่างแรกกับจำนวนลบที่ใหญ่ที่สุดซึ่งลงท้ายด้วย 48 ไม่ใช่ 47
Luke Bennett

144

ค่าลบ (32 บิต) ที่ใหญ่ที่สุด: -2147483648
(1 << 31)

ค่าบวก (32 บิต) ที่ใหญ่ที่สุด: 2147483647
~ (1 << 31)

ช่วยในการจำ: "เมาเขา AKA"

drunk ========= Drinking age is 21
AK ============ AK 47
A ============= 4 (A and 4 look the same)
horny ========= internet rule 34 (if it exists, there's 18+ material of it) 

21 47 4(years) 3(years) 4(years)
21 47 48       36       48

27
โลกที่ยากที่สุดในการจำ Mnemonic หากคุณสามารถจดจำ 0118 999 88199 9119 752 ... 3 คุณสามารถจดจำสิ่งนี้ได้
BenM

11
@Rondles ฉันคิดว่ามันเป็นจริง 7253 ในตอนท้าย
Tim Tisdall

21
Nope การดื่มอายุ 18 อยู่ที่นี่ ... ดูเหมือนว่าฉันไม่สามารถใช้เครื่องช่วยจำนี้ได้ชีวิตของฉันถูกทำลาย
Joffrey

4
@Aaren Cordova พวกเขาเคยบอกว่า stackoverflow จะไม่ตลกไม่มีอะไรมากไปกว่าเว็บไซต์ถามตอบโดยทั่วไปแล้วฉันจะชี้ให้พวกเขาตอบคำถามนี้ สิ่งนี้สามารถสร้างได้ในใจอัจฉริยะฉันหมายความว่านี่คือศิลปะ
Mohd Abdul Mujib

5
จำนวนเต็มลบ 32 บิตที่ใหญ่ที่สุดหรือ 64 บิตสำหรับเรื่องนั้นคือ -1
Fred Mitchell

75

อย่างไรก็ตามให้ใช้ regex นี้ (จะพิจารณาว่าสตริงมีจำนวนเต็มไม่เป็นลบในรูปแบบทศนิยมที่ไม่เกิน Int32.MaxValue)

[0-9]{1,9}|[0-1][0-9]{1,8}|20[0-9]{1,8}|21[0-3][0-9]{1,7}|214[0-6][0-9]{1,7}|2147[0-3][0-9]{1,6}|21474[0-7][0-9]{1,5}|214748[0-2][0-9]{1,4}|2147483[0-5][0-9]{1,3}|21474836[0-3][0-9]{1,2}|214748364[0-7]

บางทีมันอาจช่วยให้คุณจำได้


12
ฟังดูง่ายขึ้นและสนุกกับฉันมาก จริงๆแล้วมันง่ายกว่า2147483647จริงๆ นี่จะเป็นประโยชน์อย่างยิ่งสำหรับ OP
SнаSошƒаӽ

61

นั่นเป็นวิธีที่ฉันจำได้2147483647:

  • 214 - เพราะ 2.14 มีค่าประมาณ pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

เขียนในแนวนอน:

214_48_64_
and insert:
   ^  ^  ^
   7  3  7 - which is Boeing's airliner jet (thanks, sgorozco)

ตอนนี้คุณมี 2147483647

หวังว่านี่จะช่วยได้อย่างน้อย


3
ทำได้ดีนี่! ฉันคิดว่ากฎ 214 ควรเป็นไพ - 1 เช่นกันหน้ากากแสดง 68 มากกว่า 64 =) สำหรับผู้ชื่นชอบการบินอย่างฉันค่า 737 ควรจะง่ายต่อการจดจำการเชื่อมโยงกับเจ็ทสายการบินขนาดกลางของโบอิ้ง

คุณสามารถไปไกลกว่านั้น วางทศนิยมและเปรียบเทียบ pi และ 2 ^ 31-1 ในตำแหน่งเดียวกันคุณจะได้รับ 141 กับ 147 ดังนั้นหลักสุดท้ายก็กลายเป็น 7 จากนั้น 592 เทียบกับ 483 ทั้งหมดอยู่ห่างจากกันหนึ่งหลัก และ 643 เทียบกับ 647 มันกลายเป็นสิ่งที่ 7 อีกครั้ง
Peter Cooper

@PeterCooper Altho ทศนิยมสำหรับ pi เริ่มต้นด้วย 1415926_5_35 (หมายเหตุ 5 ไม่ใช่ 4)
Moberg

15
ตัวช่วยจำของฉันคือการใช้ 4294967296 (ซึ่งง่ายต่อการจดจำ) และหารด้วย 2
MM

56
2^(x+y) = 2^x * 2^y

2^10 ~ 1,000
2^20 ~ 1,000,000
2^30 ~ 1,000,000,000
2^40 ~ 1,000,000,000,000
(etc.)

2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512

ดังนั้น 2 ^ 31 (สูงสุด int ที่ลงนามแล้ว) คือ 2 ^ 30 (ประมาณ 1 พันล้าน) คูณ 2 ^ 1 (2) หรือประมาณ 2 พันล้าน และ 2 ^ 32 คือ 2 ^ 30 * 2 ^ 2 หรือประมาณ 4 พันล้าน วิธีการประมาณนี้มีความแม่นยำเพียงพอแม้กระทั่งประมาณ 2 ^ 64 (ซึ่งข้อผิดพลาดจะเพิ่มขึ้นประมาณ 15%)

หากคุณต้องการคำตอบที่แน่นอนคุณควรดึงเครื่องคิดเลขขึ้นมา

การประมาณความสามารถในการจัดเรียงคำที่มีประโยชน์:

  • 2 ^ 16 ~ = 64,000 // uint16
  • 2 ^ 32 ~ = 4 พันล้าน // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 ล้านล้าน (aka 16 พันล้านล้านหรือ 16 ล้านล้านล้าน) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 ล้านล้านล้าน (aka 256 ล้านล้านล้านล้านล้าน) // IPv6, GUID

76
นั่นคือสิ่งที่ผู้ผลิตฮาร์ดไดรฟ์พูด
Scott Stafford

46

เพียงใช้เครื่องคิดเลขที่เหมาะสมแล้วพิมพ์ "7FFFFFFF" ในโหมด hex แล้วเปลี่ยนเป็นทศนิยม

2147483647


150
เครื่องคิดเลขที่เหมาะสมก็สามารถทำได้ 2 ^ 31 เช่นกัน
Christoffer

17
ฉันไม่รู้ว่า 2 ^ 31 ดูเหมือนจะเป็นทางยาวไปกว่า: /
รัฐ

2
หรือเพียงจำไว้ใน hex
Vernon

4
แค่ ... เขียนเป็นเลขฐานสิบหก หรือInt32.MaxValue/numeric_limits<int32_t>::max()
sehe

8
@Christoffer จริง ๆ แล้วเป็น 2 ^ 31 - 1 :)
kupsef

36

2.1 * 10^9มันเป็นเรื่องของ 2^{31} - 1 = 2,147,483,647ไม่จำเป็นต้องรู้แน่นอน

คุณสามารถค้นหาได้ใน C เช่นนั้น:

#include <stdio.h>
#include <limits.h>

main() {
    printf("max int:\t\t%i\n", INT_MAX);
    printf("max unsigned int:\t%u\n", UINT_MAX);
}

ให้ (ดีไม่มี,)

max int:          2,147,483,647
max unsigned int: 4,294,967,295

C ++ 11

std::cout << std::numeric_limits<int>::max() << "\n";
std::cout << std::numeric_limits<unsigned int>::max() << "\n";

ชวา

คุณสามารถรับสิ่งนี้ได้ด้วย Java เช่นกัน:

System.out.println(Integer.MAX_VALUE);

แต่พึงระลึกไว้เสมอว่าเลขจำนวนเต็มของ Java จะถูกเซ็นชื่อเสมอ

Python 2

Python มีจำนวนเต็มความแม่นยำโดยพลการ แต่ใน Python 2 พวกมันจะถูกจับคู่กับจำนวนเต็ม C ดังนั้นคุณสามารถทำสิ่งนี้:

import sys
sys.maxint
>>> 2147483647
sys.maxint + 1
>>> 2147483648L

Python เปลี่ยนไปเป็นlongเมื่อจำนวนเต็มที่มากกว่า2^31 -1


คำตอบคืองูหลามดูล้าสมัย: stackoverflow.com/questions/13795758/...
NOhs

@ ไม่ชอบลิงก์ แต่คำตอบของ Python เกี่ยวกับ "Python 2" (ฉันเพิ่ม 2 ในหัวเรื่องเพื่อทำให้ชัดเจนยิ่งขึ้น) ดังนั้นคำตอบของฉันไม่ล้าสมัย (แต่ Python 2 เป็นที่ยอมรับ)
Martin Thoma

35

ต่อไปนี้เป็นตัวช่วยจำสำหรับการจำ 2 ** 31 ให้ลบหนึ่งรายการเพื่อรับค่าจำนวนเต็มสูงสุด

A = 1, B = 2 c = 3 d = 4, E = 5, f = 6 กรัม = 7, H = 8, I = 9

Boys And Dogs Go Duck Hunting, Come Friday Ducks Hide
2    1   4    7  4    8        3    6      4     8

ฉันใช้พลังของสองถึง 18 บ่อยครั้งมากพอที่จะจำได้ แต่ถึงแม้ฉันจะไม่ใส่ใจในการท่องจำ 2 ** 31 มันง่ายเกินไปที่จะคำนวณตามความจำเป็นหรือใช้ค่าคงที่หรือประมาณ 2G


3
คุณทำอะไรเพื่อ 2 ^ 10, 2 ^ 11, 2 ^ 12 หรือ 2 ^ 17 (ทั้งหมดนี้มีเลขศูนย์)
supercat

2
@supercat ฉันต้องการ rebase a = 0 หรือใช้ o = 0
Mark Ransom

นี่มันเจ๋งมาก. ขอบคุณคุณช่วยชีวิตฉันไว้
chenz

31

32 บิตหนึ่งรายการสำหรับข้อมูล 31 บิต:

2^31 - 1 = 2147483647

ทำไม -1
เพราะเป็นครั้งแรกที่เป็นศูนย์เพื่อให้ที่ยิ่งใหญ่ที่สุดคือการนับลบหนึ่ง

แก้ไขสำหรับcantfindaname88

การนับคือ 2 ^ 31 แต่สิ่งที่ยิ่งใหญ่ที่สุดไม่สามารถเป็น 2147483648 (2 ^ 31) เพราะเรานับจาก 0 ไม่ใช่ 1

Rank   1 2 3 4 5 6 ... 2147483648
Number 0 1 2 3 4 5 ... 2147483647

คำอธิบายอื่นที่มีเพียง 3 บิต: 1 สำหรับเครื่องหมาย 2 สำหรับข้อมูล

2^2 - 1 = 3

ต่ำกว่าค่าที่เป็นไปได้ทั้งหมดด้วย 3 บิต: (2 ^ 3 = 8 ค่า)

1: 100 ==> -4
2: 101 ==> -3
3: 110 ==> -2
4: 111 ==> -1
5: 000 ==>  0
6: 001 ==>  1
7: 010 ==>  2
8: 011 ==>  3

@ cantfindaname88: 2 ^ 31 = ชุดค่าผสมทั้งหมดดังนั้นจึงมีค่าตั้งแต่ 0 ถึง (2 ^ 31 -1) ใช่ข้อแรกคือ 0
Luciano

30

มันมี 32 บิตและสามารถเก็บค่าที่แตกต่าง 2 ^ 32 ครึ่งหนึ่งเป็นลบ

คำตอบคือ 2,147,483,647

และต่ำสุดคือ −2,147,483,648

(โปรดสังเกตว่ามีค่าลบมากกว่าหนึ่งค่า)


มันมี 32 บิตและด้วยเหตุนี้สามารถเก็บค่า 2 ^ 32 ไม่น้อย
JB

28

นอกเหนือจากเรื่องตลกถ้าคุณกำลังมองหากฎหน่วยความจำที่มีประโยชน์จริง ๆ มีสิ่งหนึ่งที่ฉันมักจะใช้เพื่อจดจำตัวเลขจำนวนมาก

คุณต้องแยกเลขของคุณออกเป็นส่วน ๆ จากตัวเลข 3-4 ตัวและจำไว้ด้วยการใช้การฉายภาพบนแป้นพิมพ์โทรศัพท์มือถือของคุณ การแสดงบนรูปภาพทำได้ง่ายกว่า:

ป้อนคำอธิบายรูปภาพที่นี่

ที่คุณสามารถดูจากนี้ไปคุณก็ต้องจำไว้ 3 รูปทรง 2 ของพวกเขามีลักษณะเหมือน Tetris L และเป็นหนึ่งในลักษณะเช่นเห็บ ซึ่งง่ายกว่าการจำตัวเลข 10 หลักอย่างแน่นอน

เมื่อคุณต้องการเรียกคืนหมายเลขเพียงแค่เรียกคืนรูปร่างลองนึกภาพ / ดูบนแป้นพิมพ์โทรศัพท์และฉายภาพรูปร่างนั้น บางทีในขั้นต้นคุณจะต้องมองไปที่แป้นพิมพ์ แต่หลังจากฝึกไปสักพักคุณจะจำได้ว่าตัวเลขนั้นมาจากบนซ้ายไปล่างล่างขวาดังนั้นคุณจะสามารถจินตนาการได้ในหัวของคุณ

เพียงให้แน่ใจว่าคุณจำทิศทางของรูปร่างและจำนวนหลักในแต่ละรูปร่าง (ตัวอย่างเช่นใน 2147483647 ตัวอย่างเรามี Tetris L 4 หลักและ L 3 หลัก L)

คุณสามารถใช้เทคนิคนี้เพื่อจดจำหมายเลขสำคัญใด ๆ ได้อย่างง่ายดาย (เช่นฉันจำหมายเลขบัตรเครดิต 16 หลักเป็นต้น)


ไอเดียเรียบร้อย! รูปร่าง 1 ให้ 2147 รูปร่าง 2 ให้ 483 และรูปร่าง 3 ควรให้ 647 แต่ตามที่วาดมันสามารถตีความเป็น 6 5 47 ฉันจะทราบได้อย่างไรว่าเมื่อรวมตัวเลขไขว้ทั้งหมด (เช่นเดียวกับในรูปร่าง 1 ) เมื่อเทียบกับการข้ามบางอย่าง คุณต้องจดจำว่ารูปร่างเข้ารหัส 4, 3 และ 3 หลักตามลำดับ หรือคุณสามารถวาด Shape 3 ด้วยส่วนโค้งจาก 6 เป็น 4 แทนเส้นตรง
jskroch

@Sinchinch โดยเฉพาะอย่างยิ่งสำหรับการจดจำ int.Max มันไม่ควรเป็นปัญหาอย่างที่คุณอาจรู้ว่ามันมีประมาณ 2 พันล้านดังนั้นมันจึงมีตัวเลข 10 ตัว (และนั่นหมายความว่าถ้ารูปแรกมี 4 ตัวเลขจากนั้นตัวเลขที่สองและสาม รูปร่างมี 3 ตาม) อย่างไรก็ตามนั่นเป็นจุดที่ดีถ้าคุณต้องการใช้วิธีนี้กับหมายเลขใด ๆ นอกจากนี้ยังมีตัวเลขที่จำได้ยากโดยใช้วิธีนี้ (เช่น 1112 หรือบางอย่าง) ในทางกลับกันก็ไม่ควรจำหมายเลขดังกล่าวได้ยาก ดังนั้นฉันจะบอกว่ามันขึ้นอยู่กับคุณแล้วแจ้งให้เราทราบหากคุณคิดสิ่งที่น่าสนใจสำหรับเรื่องนี้ :)
Ivan Yurchenko

ใช่ฉันคิดว่าจะใช้วิธีนี้ในการจำลำดับตัวเลขตามอำเภอใจ แต่สำหรับค่า int.Max นี้โดยเฉพาะวิธีการของคุณก็ใช้ได้ดีพอสมควร อย่างที่คุณพูดตัวเลขซ้ำ ๆ เป็นปัญหา อันที่จริงแล้วลำดับซ้ำ ๆ (เช่น 2323) เป็นปัญหา ลำดับใดที่ข้ามตัวเอง (เช่น 2058) เป็นการยากที่จะวาด เทคนิคการท่องจำใด ๆ ที่คุณต้องจำข้อมูลหลายชิ้น เป็นการตั้งค่าส่วนตัวประเภทของข้อมูลที่ติดอยู่ในหัวของคุณ
jskroch

1
นี่คือวิธีที่ฉันจำรหัสพินและที่คล้ายกันได้ แต่ทันใดนั้นคุณก็ต้องพิมพ์ลงในคอมพิวเตอร์ของคุณและตระหนักว่านัมปาดนั้นพลิกแนวตั้ง นั่นเป็นความท้าทาย
nibarius

บางคนในดัลลัสเท็กซัสได้รับโทรศัพท์แปลก ๆ มากมายและไม่รู้ว่าคุณ @IvanYurchenko กำลังจะโทษใคร
Bob Stein

21

วิธีที่ง่ายที่สุดในการทำเช่นนี้สำหรับจำนวนเต็มคือการใช้เลขฐานสิบหกโดยที่ไม่มีสิ่งใดเหมือน Int.maxInt () เหตุผลก็คือ:

ค่าสูงสุดที่ไม่ได้ลงชื่อ

8-bit 0xFF
16-bit 0xFFFF
32-bit 0xFFFFFFFF
64-bit 0xFFFFFFFFFFFFFFFF
128-bit 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

ค่าที่เซ็นชื่อโดยใช้ 7F เป็นค่าที่ลงชื่อสูงสุด

8-bit 0x7F
16-bit 0x7FFF
32-bit 0x7FFFFFFF
64-bit 0x7FFFFFFFFFFFFFFF

ค่าที่ลงชื่อแล้วโดยใช้ 80 เป็นค่าที่ลงชื่อสูงสุด

8-bit 0x80
16-bit 0x8000
32-bit 0x80000000
64-bit 0x8000000000000000

มันทำงานอย่างไร นี่คล้ายกับแทคติกไบนารีและเลขฐานสิบหกแต่ละตัวมีขนาดเท่ากับ 4 บิต นอกจากนี้คอมไพเลอร์จำนวนมากยังสนับสนุน hex มากกว่าที่พวกเขาสนับสนุนไบนารี

F hex to binary: 1111
8 hex to binary: 1000
7 hex to binary: 0111
0 hex to binary: 0000

ดังนั้น 7F เท่ากับ 01111111 / 7FFF เท่ากับ 0111111111111111 นอกจากนี้หากคุณใช้สิ่งนี้สำหรับ "ค่าคงที่ที่สูงมาก" 7F ... เป็นฐานสิบหกที่ปลอดภัย แต่มันง่ายพอที่จะลอง 7F และ 80 แล้วพิมพ์มัน ที่หน้าจอของคุณเพื่อดูว่าเป็นหน้าจอใด

0x7FFF + 0x0001 = 0x8000 ดังนั้นการสูญเสียของคุณเป็นเพียงตัวเลขเดียวดังนั้นการใช้ 0x7F ... โดยปกติแล้วจะไม่เป็นการแลกเปลี่ยนที่ไม่ดีสำหรับรหัสที่เชื่อถือได้มากขึ้นโดยเฉพาะเมื่อคุณเริ่มใช้ 32- บิตหรือมากกว่า


21

เขียนครั้งแรก 47 สองครั้ง (คุณชอบAgent 47ใช่ไหม) รักษาช่องว่างตามที่แสดง (แต่ละขีดเป็นช่องสำหรับตัวเลขหลักเดียว 2 ช่องแรกจากนั้น 4)

--47----47

คิดว่าคุณมี12อยู่ในมือ (เพราะ 12 = โหล) คูณด้วย4หลักแรกของหมายเลข Agent 47 เช่น47และวางผลลัพธ์ทางด้านขวาของคู่แรกที่คุณมีอยู่แล้ว

12 * 4 = 48
--4748--47 <-- after placing 48 to the right of first 47

จากนั้นคูณ12ด้วย3(เพื่อให้ตัวเลขตัวที่สองของหมายเลข Agent 47 ซึ่งก็คือ7คุณต้องการ7 - 4 = 3) และวางผลลัพธ์ทางด้านขวาของ 2 คู่แรกซึ่งเป็นคู่สล็อตสุดท้าย

12 * 3 = 36
--47483647 <-- after placing 36 to the right of first two pairs

ในที่สุดลากตัวเลขหนึ่งตัวจากมือของคุณเริ่มจากหลักขวาสุด (2 ในกรณีนี้) และวางไว้ในช่องว่างแรกที่คุณได้รับ

2-47483647 <-- after placing 2
2147483647 <-- after placing 1

ที่นั่นคุณมีมัน! สำหรับขีด จำกัด เชิงลบคุณสามารถคิดได้ว่าเป็น 1 ในค่าสัมบูรณ์มากกว่าขีด จำกัด บวก

ฝึกฝนสักสองสามครั้งแล้วคุณจะติดมัน!


"มีค่าสัมบูรณ์มากกว่าค่า จำกัด บวกอีก 1 ค่า" ได้ฉัน
Navin

20

2GB

(มีความยาวขั้นต่ำสำหรับคำตอบหรือไม่)


18
ไม่ควรที่จะเป็น GiB?
Jouke van der Maas

9
@JoukevanderMaas - จริง ๆ แล้วควรเป็น 4B
Ted Hopp

1
นี่คือเหตุผลที่ขีด จำกัด ของ RAM ที่คุณมีในคอมพิวเตอร์ 32 บิตคือ 4GB
Serj Sagan

3
ค่าของ 4GB ถูกต้องกับจำนวนเต็มไม่ได้ลงนาม หากคุณมี int ที่ลงนามคุณจะต้องหารด้วย 2 เพื่อให้ได้ค่าสูงสุดเท่าที่จะเป็นไปได้
SwissCoder

3
ใน 32 บิตมีการสำรองพื้นที่หน่วยความจำ 2GB สำหรับกระบวนการของผู้ใช้และ 2GB สำหรับเคอร์เนล สามารถกำหนดค่าเพื่อให้เคอร์เนลมีการจองเพียง 1 GB
Rune



15

กฎที่ดีที่สุดในการจดจำคือ:
21 (หมายเลขมายากล!)
47 (เพิ่งจำได้)
48 (ตามลำดับ!)
36 (21 +15 ทั้งสองเวทมนตร์!)
47อีกครั้ง

นอกจากนี้ยังง่ายต่อการจำ 5 คู่มากกว่า 10 หลัก


14

วิธีที่ง่ายที่สุดที่จะจำได้คือดู std::numeric_limits< int >::max()

ตัวอย่างเช่น ( จาก MSDN )

// numeric_limits_max.cpp

#include <iostream>
#include <limits>

using namespace std;

int main() {
   cout << "The maximum value for type float is:  "
        << numeric_limits<float>::max( )
        << endl;
   cout << "The maximum value for type double is:  "
        << numeric_limits<double>::max( )
        << endl;
   cout << "The maximum value for type int is:  "
        << numeric_limits<int>::max( )
        << endl;
   cout << "The maximum value for type short int is:  "
        << numeric_limits<short int>::max( )
        << endl;
}

14

ที่น่าสนใจ Int32.MaxValue มีอักขระมากกว่า 2,147,486,647 ตัว

แต่แล้วอีกครั้งเรามีรหัสให้เสร็จ

ดังนั้นฉันเดาว่าสิ่งที่เราต้องจดจำจริงๆก็คือInt3<period>M<enter>ซึ่งมีเพียง 6 ตัวอักษรที่จะพิมพ์ใน visual studio

อัปเดต ด้วยเหตุผลบางอย่างฉันถูกลงคะแนน เหตุผลเดียวที่ฉันคิดได้ก็คือพวกเขาไม่เข้าใจคำแถลงแรกของฉัน

"Int32.MaxValue" ใช้เวลาสูงสุด 14 ตัวอักษรในการพิมพ์ 2,147,486,647 ใช้ตัวอักษร 10 หรือ 13 ตัวขึ้นอยู่กับว่าคุณใส่เครื่องหมายจุลภาคหรือไม่


2
แต่สิ่งที่นับนั้นไม่ใช่จำนวนตัวอักษรที่คุณต้องพิมพ์ แต่จะจดจำได้อย่างไร ฉันแน่ใจว่าIwannagohomeจะง่ายต่อการ memoize 298347829กว่า อย่างไรก็ตามไม่มีเหตุผลสำหรับ -1
glglgl

3
อาจน้อยกว่านั้นเพียงแค่สร้างข้อมูลโค้ดสูงสุดของคุณเอง "imv" <tab> <tab> บางที
BradleyDotNET

4
ตัวละคร!=Keystrokes สำหรับผู้ใช้. net ที่น่าสงสารคนนี้มันคือin+ .+ ma+ Return
ไมเคิล - ที่ไหน Clay Shirky

11

เพิ่งทราบว่า 2 ^ (10 * x) มีค่าประมาณ 10 ^ (3 * x) - คุณอาจคุ้นเคยกับเรื่องนี้ด้วยกิโลไบต์ / kibibytes เป็นต้นนั่นคือ:

2^10 = 1024                ~= one thousand
2^20 = 1024^2 = 1048576    ~= one million
2^30 = 1024^3 = 1073741824 ~= one billion

เนื่องจาก int ใช้ 31 บิต (+ ~ 1 บิตสำหรับเครื่องหมาย) เพียงแค่เพิ่มเป็นสองเท่า ^ 2 เพื่อให้ได้ประมาณ 2 พันล้าน สำหรับ int ที่ไม่ได้ลงนามโดยใช้ 32 บิตให้เพิ่มเป็นสองเท่าเป็น 4 พันล้านครั้ง ปัจจัยความผิดพลาดจะเพิ่มขึ้นตามจำนวนที่มากขึ้นของหลักสูตร แต่คุณไม่จำเป็นต้องจดจำค่าที่แน่นอน (หากคุณต้องการคุณควรใช้ค่าคงที่ที่กำหนดไว้ล่วงหน้าสำหรับมัน) ค่าโดยประมาณดีพอสำหรับการสังเกตเมื่อบางสิ่งบางอย่างอาจเป็นอันตรายใกล้กับน้ำล้น


10
Offtopic: 2 ^ 4 = 4 ^ 2 ดังนั้นการยกกำลังจึงเป็นการสลับกัน!
Adam Liss

10
@ Pier-OlivierThibault ไม่ฉันใช้มันตลอดเวลา! ตอนนี้ฉันต้องค้นหาสาเหตุที่คณิตศาสตร์ของฉันออกมาผิดทั้งหมด อาจจะทำอย่างไรกับข้อผิดพลาดการคูณ อย่างไรก็ตามลาก่อน!
Doorknob

9

นี่คือวิธีที่ฉันทำเพื่อจดจำ 2,147,483,647

ไปยังไตรมาสสะวันนาที่ไกลออกไป optimus trio hexed สี่สิบ septenary

2 - To
1 - A
4 - Far
7 - Savannah
4 - Quarter
8 - Optimus
3 - Trio
6 - Hexed
4 - Forty
7 - Septenary

7

คุณหมายถึงอะไร มันควรจะง่ายพอที่จะจำได้ว่ามันคือ 2 ^ 32 หากคุณต้องการให้กฎจดจำค่าของตัวเลขนั้นกฎง่าย ๆ สำหรับการแปลงระหว่างไบนารีและทศนิยมโดยทั่วไป:

2 ^ 10 ~ 1,000

ซึ่งหมายถึง 2 ^ 20 ~ 1,000,000

และ 2 ^ 30 ~ 1,000,000,000

สองเท่า (2 ^ 31) คือ 2 พันล้าน rounghly และเพิ่มเป็นสองเท่า (2 ^ 32) คือ 4 พันล้าน

มันเป็นวิธีที่ง่ายในการประมาณคร่าวๆของเลขฐานสอง 10 ศูนย์ในไบนารีกลายเป็น 3 ศูนย์ในทศนิยม


7
แต่ไม่ใช่ 2 ^ 32 - มันคือ (2 ^ 31) -1
Steve Folly

6

ใน Objective-C (iOS & OSX) เพียงจำมาโครเหล่านี้:

#define INT8_MAX         127
#define INT16_MAX        32767
#define INT32_MAX        2147483647
#define INT64_MAX        9223372036854775807LL

#define UINT8_MAX         255
#define UINT16_MAX        65535
#define UINT32_MAX        4294967295U
#define UINT64_MAX        18446744073709551615ULL

5

Int32 หมายถึงคุณมี 32 บิตเพื่อจัดเก็บหมายเลขของคุณ บิตสูงสุดคือเครื่องหมายบิตซึ่งบ่งชี้ว่าจำนวนเป็นบวกหรือลบ คุณมีบิต 2 ^ 31 สำหรับจำนวนบวกและลบ

ด้วยศูนย์ที่เป็นจำนวนบวกคุณจะได้รับช่วงตรรกะ (ที่กล่าวถึงก่อนหน้านี้)

+2147483647 ถึง -2147483648

หากคุณคิดว่าเล็กเกินไปให้ใช้ Int64:

+9223372036854775807 ถึง -9223372036854775808

และทำไมนรกที่คุณต้องการจดจำหมายเลขนี้ เพื่อใช้ในรหัสของคุณ? คุณควรใช้ Int32.MaxValue หรือ Int32.MinValue ในรหัสของคุณเนื่องจากค่าเหล่านี้เป็นค่าคงที่ (ภายใน. net core) และทำให้ใช้งานได้เร็วกว่าการสร้าง int ใหม่ด้วยรหัส

คำสั่งของฉัน: ถ้ารู้ว่าตัวเลขนี้ด้วยหน่วยความจำ .. คุณเพียงแค่แสดง!


2
คอมพิวเตอร์ที่ทันสมัยส่วนใหญ่เก็บหมายเลขในรูปแบบ "การชมเชยสองครั้ง" บิตสูงสุด (ไม่ต่ำสุด) คือเครื่องหมาย สิ่งที่เรียบร้อยพร้อมการคำนวณแบบ twos คือหมายเลข -ve ถูกจัดการโดยกฎโอเวอร์โฟลว์ตามธรรมชาติของ CPU นั่นคือ 0xFF คือ 8 บิต -1 เพิ่มเข้าไปที่ 0x01 (+1) แล้วคุณจะได้ 0x100 ตัดบิตด้านบน 8 ถึง 0x00 และคุณมีคำตอบ
Tom Leys

5

จดจำสิ่งนี้: 21 IQ รายการที่ 47

มันสามารถเข้ารหัสด้วยแผ่นโทรศัพท์ใด ๆ หรือคุณสามารถเขียนลงบนกระดาษ

ในการจำ "21 IQ ITEM 47" ฉันจะไปกับ "Hitman: Codename 47 มี 21 ภารกิจซึ่งแต่ละไอเท็มไอคิวเอง"

หรือ "ฉันทำความสะอาดฟันเวลา 21:47 น. ทุกวันเพราะฉันมี IQ สูงและไม่ชอบสิ่งของในปากของฉัน"


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