Giá trị tối đa cho một int32 là gì?


1380

Tôi không bao giờ có thể nhớ số. Tôi cần một quy tắc bộ nhớ.


48
không dấu: 2³²-1 = 4 · 1024³-1; đã ký: -2³¹ .. + 2³¹-1, vì bit-bit là bit cao nhất. Chỉ cần học 2⁰ = 1 đến 2¹⁰ = 1024 và kết hợp. 1024 = 1k, 1024² = 1M, 1024³ = 1G
comonad

31
Tôi thường nhớ rằng cứ 3 bit là khoảng một chữ số thập phân. Điều này đưa tôi đến đúng thứ tự cường độ: 32 bit là 10 chữ số.
Barmar

8
@JoachimSauer chắc chắn có thể giúp gỡ lỗi nếu bạn học cách ít nhất nhận ra các loại số này.
Dunaril

72
"nếu một đĩa đầy, xóa tất cả mbyte sẽ lưu trữ" (2 chữ cái, 1 chữ cái, 4 chữ cái, 7 chữ cái, 4 chữ cái, 8 chữ cái, 3 chữ cái, 6 chữ cái, 4 chữ cái, 7 chữ cái)
UltraCommit

8
Một trường hợp, khi int32 là không đủ: bbc.com/news/world-asia-30288542
ingaham

Câu trả lời:


5073

Đó là 2.147.483.647. Cách dễ nhất để ghi nhớ nó là thông qua một hình xăm.


83
Bản ghi nhớ của tôi: 2 ^ 10 rất gần 1000, vì vậy 2 ^ (3 * 10) là 1000 ^ 3 hoặc khoảng 1 tỷ. Một trong 32 bit được sử dụng để ký, vì vậy giá trị tối đa thực sự chỉ là 2 ^ 31, gấp khoảng hai lần số tiền bạn nhận được cho 2 ^ (3 * 10): 2 tỷ.
16807

164
2147483647 không có dấu phẩy.
Vern D.

20
Đơn giản chỉ cần sử dụng: Integer.MAX_VALUEtrong Java.
Tim

184
Nếu bạn có hình xăm trên mặt, đừng quên đảo ngược nó để nó đọc chính xác trong gương. Nếu không, bạn sẽ thấy 746.384.741,2 là sai và sẽ gây lúng túng.
Larry S

127
2.147.483.647 = 0x7FFFFFFF, nếu bạn muốn nhớ nó, chỉ cần sử dụng hex.
roottraveller

493

Câu trả lời đúng nhất tôi có thể nghĩ là Int32.MaxValue.


18
Trước khi điều này tồn tại, tôi đã sử dụng #define INT32_MIN và INT32_MAX trong tất cả các dự án của mình.
WildJoe

45
@CamiloMartin Này. Tôi bực bội điều đó. Không có chỗ cho bất kỳ hình xăm nữa. Rõ ràng, bộ ký tự iso-8859-1, và số thập phân Pi đến 31415 phải được ưu tiên
sehe

3
Khi bạn đang lập trình: có trong 99% trường hợp. Nhưng bạn có thể muốn biết rằng đó là khoảng 2 tỷ để lập kế hoạch tiếp cận lập trình hoặc khi làm việc với dữ liệu, mặc dù đó là một con số rất lớn. :)
Andre Figueiredo

@sehe Không phải là latin1 / Windows 1252 đã lỗi thời? Nếu nó không phù hợp với 7 byte của ASCII, tôi không nghĩ rằng nó xứng đáng có một vị trí trong bộ nhớ chính. Ý tôi là ... tất cả các trang mã UNICODE đều hữu ích, nhưng trên một meg không gian da có vẻ là một sự lãng phí. (Không đề cập đến nó vẫn không bao gồm các glyph mô tả cho "pageup / pagedown" hoặc "pagehome / pageend")

1
Khách sạn này có thể là một lời khuyên tốt ngoài việc đề cập đến số chính xác. Tuy nhiên, tôi không thích câu trả lời này vì nó chỉ đề cập đến một cách không thể làm giảm giá trị và nó không đề cập đến ngôn ngữ lập trình nào mà nó hoạt động, hoặc ...
mozzbozz 12/12/14

439

Nếu bạn nghĩ rằng giá trị quá khó nhớ trong cơ sở 10, hãy thử cơ sở 2: 11111111111111111111111111111111


145
@Nick Whaley: Không, 11111111111111111111111111111111 là dương tính. 11111111111111111111111111111111 sẽ âm :-)
Curd

58
Cơ sở 16 thậm chí còn dễ dàng hơn 7FFFFFFF
Nelson Galdeman Graziano

34
@Curd 11111111111111111111111111111111là số cơ sở 2 vẫn sẽ dương (ví dụ âm trong cơ sở 2 sẽ là -1) . Chuỗi bit đó chỉ âm nếu biểu thị số bổ sung của 32 bit 2 :)
BlueRaja - Danny Pflughoeft

143
Dễ nhớ nhất sẽ là cơ sở 2.147.483.647. Sau đó, tất cả những gì bạn phải nhớ là 1.
big_tommy_7bb

82
@ tim_barber_7BB thực sự là 10.
fscheidl

317

nếu bạn có thể nhớ toàn bộ số Pi, thì số bạn đang tìm kiếm nằm ở vị trí 1.867.996.680 cho đến 1.867.996.689 của các chữ số thập phân của Pi

Chuỗi số 2147483647 xuất hiện ở 1.867.996.680 chữ số thập phân của Pi. 3.14 ...... 86181221809936452346 2147483647 10527835665425671614 ...

nguồn: http://www.subidiom.com/pi/


30
bạn biết đấy, khi tôi bắt đầu đọc câu trả lời của bạn, tôi đã mong đợi một điều gì đó thiết thực, như chữ số thứ 20.
JqueryToAddNumbers

95
Điều này có vẻ khá mát mẻ. Bạn có một quy tắc bộ nhớ khác để nhớ 1.867.996.680 không? Tôi cảm thấy khó nhớ khi bắt đầu tìm kiếm chỉ số nào ....
Alderath

10
" Nếu bạn có thể nhớ toàn bộ số Pi ... " - không, bạn không thể, đó là điều phi lý {vì có thể một hoặc hai bài đăng trong Hỏi & Đáp này 8-D
SlySven

10
@Alderath Tôi thường nhớ nó là 10 số thập phân trong sqrt (2) bắt đầu từ số chữ số 380,630,713 ....
Henrik

2
@Alderath: Chuỗi số 1867996680 xuất hiện ở chữ số thập phân 380,630,713 của Căn bậc hai của 2.
Yair Halberstadt

290

Đó là 10 chữ số, vì vậy hãy giả vờ đó là số điện thoại (giả sử bạn đang ở Mỹ). 214-748-3647. Tôi không khuyên bạn nên gọi nó.


13
Nói về việc nhớ nó như một số điện thoại, có vẻ như có thể có một số kẻ gửi thư rác sử dụng nó: mrnumber.com/1-214-748-3647
Steven

8
"Không có trao đổi" 748 "ở Dallas. Con số này là giả mạo." - từ trang được liên kết bởi shambleh
Tarnay Kálmán

104
@Steven Tôi không nghĩ họ là người gửi thư rác, chỉ là những người vô tình lưu trữ số điện thoại INTthay vì VARCHARtrong MySQL.
Zarel

8
Đã thử gọi nó. Nó reo vài lần rồi chuyển sang âm quay số lỗi. = (
Krythic

172

Thay vì nghĩ về nó như một con số lớn, hãy thử phá vỡ nó và tìm kiếm những ý tưởng liên quan, ví dụ:

  • 2 lần nghỉ bi-a tối đa (thời gian nghỉ tối đa là 147)
  • 4 năm (48 tháng)
  • 3 năm (36 tháng)
  • 4 năm (48 tháng)

Những điều trên áp dụng cho số âm lớn nhất; tích cực là trừ đi một.

Có thể sự cố ở trên sẽ không còn đáng nhớ đối với bạn nữa (hầu như không thú vị lắm!), Nhưng hy vọng bạn có thể đưa ra một số ý tưởng!


99
Đó là một trong những thiết bị viêm phổi phức tạp nhất mà tôi đã thấy. Ấn tượng.
Ben Hoffstein

9
Heh, những người như Derren Brown thực sự ủng hộ cách tiếp cận này - chia một số thành một thứ ngẫu nhiên nhưng whieh đáng nhớ hơn chỉ là một tải số: channel4.com/enter[/tv/microsites/M/mindcontrol/remember/
Luke Bennett

19
Tôi có một khả năng ghi nhớ tốt hơn: tất cả những gì bạn cần nhớ là 2 và 31, vì nó rõ ràng là chính xác 2 ^ 31! Ôi, đợi đã ...
Tamas Czinege

28
@DrJokepu Tôi không chắc chắn về quyền ưu tiên của nhà điều hành ... Điều đó có nghĩa là 2^(31!)hay (2^31)!?
Alderath

1
@Lucio Lưu ý rằng câu trả lời của tôi liên quan đến trường hợp đầu tiên với số âm lớn nhất kết thúc bằng 48, không phải 47
Luke Bennett

144

Giá trị âm lớn nhất (32 bit): -2147483648
(1 << 31)

Giá trị dương lớn nhất (32 bit): 2147483647
~ (1 << 31)

Mnemonic: "AKA say rượu"

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
Thế giới khó nhớ nhất Mnemonic. Nếu bạn có thể ghi nhớ 0118 999 88199 9119 752 ... 3 bạn có thể ghi nhớ điều này.
BenM

11
@Rondles Tôi nghĩ rằng cuối cùng thực sự là 7253.
Tim Tonomall

21
Không. Tuổi uống rượu là 18 ở đây ... Có vẻ như tôi không thể sử dụng thứ tưởng niệm này, cuộc sống của tôi bị hủy hoại.
Joffrey

4
@Aaren Cordova Họ từng nói stackoverflow sẽ không bao giờ buồn cười, không gì khác hơn là một trang web Hỏi & Đáp, tôi thường chỉ cho họ câu trả lời này. Điều này chỉ có thể được tạo ra trong một bộ óc thiên tài, ý tôi là đây Nghệ thuật.
Mohd Abdul Mujib

5
Số nguyên 32 bit âm lớn nhất, hoặc 64 bit cho vấn đề đó, là -1.
Fred Mitchell

75

Dù sao, hãy lấy regex này (nó xác định nếu chuỗi chứa Số nguyên không âm ở dạng thập phân cũng không lớn hơn 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]

Có lẽ nó sẽ giúp bạn nhớ.


12
Điều đó nghe có vẻ dễ dàng và thú vị hơn nhiều đối với tôi. Trên thực tế nó thực sự là dễ dàng hơn nhiều 2147483647. Điều này sẽ giúp ích rất nhiều cho OP
Sнаđошƒаӽ

61

Đó là cách tôi nhớ 2147483647:

  • 214 - vì 2,14 xấp xỉ pi-1
  • 48 = 6 * 8
  • 64 = 8 * 8

Viết những thứ này theo chiều ngang:

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

Bây giờ bạn đã có 2147483647.

Hy vọng điều này sẽ giúp ít nhất một chút.


3
Đẹp quá Tôi nghĩ rằng quy tắc 214 phải là pi - 1. Ngoài ra, mặt nạ hiển thị 68 chứ không phải 64. =) Đối với những người yêu thích hàng không như tôi, giá trị 737 phải dễ nhớ khi liên kết nó với máy bay phản lực cỡ trung của Boeing.

Bạn có thể đi xa hơn thế. Thả số thập phân và so sánh pi và 2 ^ 31-1. Trong cùng một vị trí bạn nhận được 141 so với 147, vì vậy chữ số cuối cùng sẽ trở thành số 7. Sau đó 592 so với 483, tất cả đều là một chữ số của nhau. Và 643 so với 647, nó lại trở thành một thứ 7.
Peter Cooper

@PeterCooper Altho số thập phân cho số pi bắt đầu bằng 1415926_5_35 (Lưu ý số 5, không phải số 4)
Moberg

15
Bản ghi nhớ của tôi là lấy 4294967296 (dễ nhớ) và chia cho 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

Vì vậy, 2 ^ 31 (đã ký int max) là 2 ^ 30 (khoảng 1 tỷ) lần 2 ^ 1 (2), tương đương khoảng 2 tỷ. Và 2 ^ 32 là 2 ^ 30 * 2 ^ 2 hoặc khoảng 4 tỷ đồng. Phương pháp gần đúng này đủ chính xác, thậm chí khoảng 2 ^ 64 (trong đó sai số tăng lên khoảng 15%).

Nếu bạn cần một câu trả lời chính xác thì bạn nên kéo lên một máy tính.

Các xấp xỉ công suất liên kết từ tiện dụng:

  • 2 ^ 16 ~ = 64 nghìn // uint16
  • 2 ^ 32 ~ = 4 tỷ // uint32, IPv4, unixtime
  • 2 ^ 64 ~ = 16 triệu (còn gọi là 16 tỷ tỷ hoặc 16 triệu nghìn tỷ đồng) // uint64, "bigint"
  • 2 ^ 128 ~ = 256 triệu triệu triệu (còn gọi là 256 nghìn tỷ nghìn tỷ đồng) // IPv6, GUID

76
Đó là những gì các nhà sản xuất ổ cứng nói.
Scott Stafford

46

Chỉ cần lấy bất kỳ máy tính tử tế nào và nhập "7FFFFFFF" ở chế độ hex, sau đó chuyển sang thập phân.

2147483647.


150
Bất kỳ máy tính phong nha cũng có thể làm 2 ^ 31.
Christoffer

17
Tôi không biết 2 ^ 31 dường như là con đường dài để làm điều đó: /
Hoa Kỳ

2
Hoặc chỉ cần nhớ nó trong hex
Vernon

4
Chỉ cần ... viết nó bằng hex. Hoặc Int32.MaxValue/numeric_limits<int32_t>::max()
sehe

8
@Christoffer Nó thực sự là 2 ^ 31 - 1 :)
kupsef

36

Đó là về 2.1 * 10^9. Không cần phải biết chính xác 2^{31} - 1 = 2,147,483,647.

C

Bạn có thể tìm thấy nó trong C như thế:

#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);
}

cho (tốt, không có ,)

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

Bạn cũng có thể có được điều này với Java:

System.out.println(Integer.MAX_VALUE);

Nhưng hãy nhớ rằng các số nguyên Java luôn được ký.

Con trăn 2

Python có số nguyên chính xác tùy ý. Nhưng trong Python 2, chúng được ánh xạ tới các số nguyên C. Vì vậy, bạn có thể làm điều này:

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

Vì vậy, Python chuyển sang longkhi số nguyên lớn hơn2^31 -1


Câu trả lời của Python đã lỗi thời, xem: stackoverflow.com/questions/13795758/ấc
NOhs

@NOhs Tôi đánh giá cao liên kết, nhưng câu trả lời Python của tôi là về "Python 2" (Tôi thêm 2 vào tiêu đề của phần để làm cho nó rõ ràng hơn). Vì vậy, câu trả lời của tôi không bị lỗi thời. (Nhưng Python 2, phải thừa nhận là)
Martin Thoma

35

Đây là một ghi nhớ để ghi nhớ 2 ** 31, trừ đi một để có giá trị nguyên tối đa.

a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 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

Tôi đã sử dụng sức mạnh của hai đến 18 thường đủ để ghi nhớ chúng, nhưng thậm chí tôi không bận tâm đến việc ghi nhớ 2 ** 31. Thật quá dễ dàng để tính toán khi cần hoặc sử dụng hằng số, hoặc ước tính là 2G.


3
Bạn làm gì cho 2 ^ 10, 2 ^ 11, 2 ^ 12 hoặc 2 ^ 17 (tất cả đều có số 0)?
supercat

2
@supercat Tôi sẽ rebase a = 0 hoặc sử dụng o = 0.
Đánh dấu tiền chuộc

Điều này thật tuyệt. Cảm ơn, bạn cứu mạng tôi.
chenz

31

32 bit, một cho dấu hiệu, 31 bit thông tin:

2^31 - 1 = 2147483647

Tại sao -1?
Bởi vì đầu tiên là 0, nên lớn nhất là số trừ một .

EDIT cho cantfindaname88

Tổng số là 2 ^ 31 nhưng lớn nhất không thể là 2147483648 (2 ^ 31) vì chúng tôi đếm từ 0 chứ không phải 1.

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

Một lời giải thích khác chỉ có 3 bit: 1 cho dấu hiệu, 2 cho thông tin

2^2 - 1 = 3

Bên dưới tất cả các giá trị có thể có 3 bit: (2 ^ 3 = 8 giá trị)

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 = tổng số kết hợp, do đó, phạm vi từ 0 đến (2 ^ 31 -1). Có đầu tiên là 0.
Luciano

30

Chà, nó có 32 bit và do đó có thể lưu trữ 2 ^ 32 giá trị khác nhau. Một nửa trong số đó là tiêu cực.

Giải pháp là 2.147.483.647

Và thấp nhất là −2,147,483,648.

(Lưu ý rằng có thêm một giá trị âm.)


Nó có 32 bit và do đó có thể lưu trữ 2 ^ 32 giá trị. Không ít.
JB.

28

Chà, ngoài những trò đùa, nếu bạn thực sự tìm kiếm một quy tắc bộ nhớ hữu ích, có một quy tắc mà tôi luôn sử dụng để ghi nhớ những con số lớn.

Bạn cần chia số của bạn thành các phần từ 3-4 chữ số và ghi nhớ chúng một cách trực quan bằng cách sử dụng phép chiếu trên bàn phím điện thoại di động của bạn. Dễ dàng hơn để hiển thị trên một hình ảnh:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, từ bây giờ bạn chỉ cần nhớ 3 hình dạng, 2 trong số chúng trông giống như một Tetris L và một hình trông giống như một con bọ ve . Điều này chắc chắn dễ dàng hơn nhiều so với việc ghi nhớ một số gồm 10 chữ số.

Khi bạn cần nhớ lại số chỉ cần nhớ lại các hình dạng, hãy tưởng tượng / nhìn trên bàn phím điện thoại và chiếu các hình trên đó. Có lẽ ban đầu bạn sẽ phải nhìn vào bàn phím nhưng chỉ sau một chút luyện tập, bạn sẽ nhớ rằng các con số đang đi từ trên cùng bên trái sang dưới cùng bên phải để bạn có thể tưởng tượng nó trong đầu.

Chỉ cần đảm bảo rằng bạn nhớ hướng của hình dạng và số chữ số trong mỗi hình dạng (ví dụ: trong ví dụ 2147483647, chúng ta có Tetris L gồm 4 chữ số và L có 3 chữ số).

Bạn có thể sử dụng kỹ thuật này để dễ dàng ghi nhớ bất kỳ số quan trọng nào (ví dụ: tôi nhớ số thẻ tín dụng 16 chữ số của mình, v.v.).


Ý tưởng gọn gàng! Hình 1 cung cấp cho bạn 2147, Hình 2 cung cấp cho bạn 483 và Hình 3 được cho là 647, nhưng như được vẽ, nó có thể được hiểu là 6 5 47. Làm thế nào để tôi biết khi nào nên bao gồm tất cả các số chéo (như trong Hình 1 ) so với khi nào bỏ qua một số (như trong Hình 3)? Bạn cũng phải ghi nhớ rằng các hình dạng mã hóa lần lượt 4, 3 và 3 chữ số. Hoặc bạn có thể vẽ Hình 3 với một vòng cung từ 6 đến 4 thay vì một đường thẳng.
jskroch

@Squinch Chà, đặc biệt là để nhớ int.Max không phải là vấn đề vì bạn có thể biết rằng đó là khoảng 2 tỷ nên nó có 10 số trong đó (và điều đó có nghĩa là nếu hình đầu tiên có 4 số thì số thứ hai và số thứ ba hình dạng có 3 tương ứng). Tuy nhiên, đó là một điểm tốt nếu bạn muốn sử dụng phương pháp này cho bất kỳ số nào. Ngoài ra, có những con số rất khó nhớ bằng cách này (ví dụ 1112 hoặc một cái gì đó). Mặt khác, dù sao cũng không khó để nhớ số đó. Vì vậy, tôi muốn nói điều đó tùy thuộc vào bạn, hãy cho tôi biết nếu bạn nghĩ ra điều gì đó thú vị cho việc này. :)
Ivan Yurchenko

Vâng, tôi đã suy nghĩ về việc sử dụng phương pháp này để gọi lại một chuỗi các chữ số tùy ý, nhưng đối với giá trị int.Max cụ thể này, phương thức của bạn hoạt động khá tốt. Như bạn đã nói, các chữ số lặp đi lặp lại là một vấn đề. Trong thực tế, bất kỳ chuỗi lặp lại (chẳng hạn như 2323) là một vấn đề. Bất kỳ chuỗi nào vượt qua chính nó (chẳng hạn như 2058) đều khó vẽ. Bất kỳ kỹ thuật ghi nhớ đều yêu cầu bạn phải nhớ một vài thông tin. Đó là sở thích cá nhân những loại thông tin tốt nhất dính vào đầu bạn.
jskroch

1
Đây là cách tôi nhớ mã pin và tương tự, nhưng rồi đột nhiên bạn cần nhập nó vào máy tính của mình và nhận ra rằng numpad được lật theo chiều dọc. Vì vậy, đó là một chút thách thức.
nibarius

Ai đó ở Dallas, Texas , đã nhận được nhiều cuộc gọi điện thoại lạ và không biết bạn @IvanYurchenko phải đổ lỗi.
Bob Stein

21

Cách dễ nhất để làm điều này cho các số nguyên là sử dụng hệ thập lục phân, với điều kiện là không có gì giống như Int.maxInt (). Lý do là thế này:

Giá trị không dấu tối đa

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

Các giá trị đã ký, sử dụng 7F làm giá trị được ký tối đa

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

Các giá trị đã ký, sử dụng 80 làm giá trị được ký tối đa

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

Cái này hoạt động ra sao? Điều này rất giống với chiến thuật nhị phân và mỗi chữ số hex chính xác là 4 bit. Ngoài ra, rất nhiều trình biên dịch hỗ trợ hex tốt hơn rất nhiều so với việc chúng hỗ trợ nhị phân.

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

Vì vậy, 7F bằng 01111111 / 7FFF bằng 0111111111111111. Ngoài ra, nếu bạn đang sử dụng điều này cho "hằng số cực kỳ cao", 7F ... là hex an toàn, nhưng đủ dễ để thử 7F và 80 và chỉ cần in chúng vào màn hình của bạn để xem nó là cái nào

0x7FFF + 0x0001 = 0x8000, do đó, tổn thất của bạn chỉ là một số, vì vậy sử dụng 0x7F ... thường không phải là một sự đánh đổi tồi cho mã đáng tin cậy hơn, đặc biệt là khi bạn bắt đầu sử dụng 32 bit trở lên


21

Đầu tiên viết ra 47 lần, (bạn thích Agent 47 , phải không?), Giữ khoảng trắng như được hiển thị (mỗi dấu gạch ngang là một vị trí cho một chữ số. 2 khe đầu tiên, sau đó 4)

--47----47

Hãy nghĩ rằng bạn có 12trong tay (vì 12 = một tá). Nhân số đó với 4, chữ số đầu tiên của số Đại lý 47, nghĩa là 47đặt kết quả ở bên phải của cặp đầu tiên bạn đã có

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

Sau đó nhân 12với 3(để tạo chữ số thứ hai của số Agent 47, nghĩa là 7bạn cần 7 - 4 = 3) và đặt kết quả sang bên phải của 2 cặp đầu tiên, vị trí cặp cuối cùng

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

Cuối cùng kéo từng chữ số một từ bàn tay của bạn bắt đầu từ chữ số bên phải nhất (2 trong trường hợp này) và đặt chúng vào khe trống đầu tiên bạn nhận được

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

Có bạn có nó! Đối với giới hạn âm, bạn có thể nghĩ rằng đó là 1 nhiều hơn về giá trị tuyệt đối so với giới hạn dương.

Thực hành một vài lần, và bạn sẽ nhận được hang của nó!


"1 nhiều hơn trong giá trị tuyệt đối so với giới hạn tích cực" đã cho tôi.
Navin

20

2GB

(có độ dài tối thiểu cho câu trả lời không?)


18
Không phải đó là GiB sao?
Jouke van der Maas

9
@JoukevanderMaas - Thật ra, nó phải là 4B.
Ted Hopp

1
Đó là lý do tại sao giới hạn RAM bạn có thể có trên máy tính 32 bit là 4GB
Serj Sagan

3
giá trị của 4GB là chính xác với số nguyên không dấu. nếu bạn có số int đã ký, rõ ràng bạn cần chia cho 2 để có được giá trị tối đa có thể
SwissCoder

3
Trong 32 bit có 2GB dung lượng dự trữ không gian bộ nhớ cho quá trình người dùng và 2GB cho kernel. Nó có thể được cấu hình để kernel chỉ có 1 GB dành riêng
Rune

15

Giả sử .NET -

Console.WriteLine(Int32.MaxValue);

15

Nếu bạn tình cờ biết bảng ASCII của bạn tắt và không MaxInt:
!GH6G = 21 47 48 36 47


Khi tôi viết câu trả lời này, tôi không biết GH6G có quá nhiều lượt truy cập Google và bây giờ tôi đã sử dụng chính nó :-)
Mark Hurd

15

Quy tắc tốt nhất để ghi nhớ nó là:
21 (số ma thuật!)
47 (chỉ cần nhớ nó)
48 (tuần tự!)
36 (21 + 15, cả hai phép thuật!)
47 một lần nữa

Ngoài ra, dễ nhớ hơn 5 cặp hơn 10 chữ số.


14

Cách dễ nhất để nhớ là nhìn vào std::numeric_limits< int >::max()

Ví dụ: ( từ 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

Điều thú vị là Int32.MaxValue có nhiều ký tự hơn 2.147.486.647.

Nhưng một lần nữa, chúng tôi đã hoàn thành mã,

Vì vậy, tôi đoán tất cả những gì chúng ta thực sự phải ghi nhớ là Int3<period>M<enter>, chỉ có 6 ký tự để nhập vào studio hình ảnh.

CẬP NHẬT Vì một số lý do tôi đã bị hạ cấp. Lý do duy nhất tôi có thể nghĩ đến là họ không hiểu câu nói đầu tiên của tôi.

"Int32.MaxValue" cần tối đa 14 ký tự để nhập. 2.147.486.647 mất 10 hoặc 13 ký tự để nhập tùy thuộc vào việc bạn có đặt dấu phẩy hay không.


2
Nhưng điều quan trọng không phải là bạn phải nhập bao nhiêu ký tự, mà là cách ghi nhớ nó. Tôi chắc chắn Iwannagohomelà dễ nhớ hơn 298347829. Không có lý do cho -1, tuy nhiên.
glglgl

3
Nó có thể ít hơn thế, chỉ cần tạo đoạn trích giá trị tối đa của riêng bạn, "imv" <tab> <tab> có lẽ?
BradleyDotNET

4
Tổ hợp !=phím nhân vật . Đối với người dùng .Net kém này, đó là in+ .+ ma+ Return.
Michael - Clay Shirky

11

Chỉ cần nhớ rằng 2 ^ (10 * x) xấp xỉ 10 ^ (3 * x) - có lẽ bạn đã quen với điều này với kilobytes / kibibytes, v.v. Đó là:

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

Vì một int sử dụng 31 bit (+ ~ 1 bit cho dấu hiệu), chỉ cần tăng gấp đôi 2 ^ 30 để nhận được khoảng 2 tỷ. Đối với một số nguyên không dấu sử dụng 32 bit, tăng gấp đôi với giá 4 tỷ. Tất nhiên, hệ số lỗi càng cao khi bạn càng lớn, nhưng bạn không cần ghi nhớ giá trị chính xác (Nếu bạn cần, bạn nên sử dụng hằng số được xác định trước cho nó). Giá trị gần đúng là đủ tốt để nhận thấy khi một cái gì đó có thể là nguy hiểm gần tràn.


10
Offtopic: 2 ^ 4 = 4 ^ 2, do đó lũy thừa là giao hoán!
Adam Liss

10
@ Pier-OlivierThibault không, tôi sử dụng nó mọi lúc! bây giờ tôi cần tìm hiểu tại sao tất cả toán học của tôi bị sai. có lẽ một cái gì đó để làm với lỗi nhân. thôi chào nhé!
Doorknob

9

đây là cách tôi làm để ghi nhớ 2.147.483.647

Đến một vùng thảo nguyên xa xôi của bộ ba Optimus hexed bốn mươi vách ngăn

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

7

Ý anh là gì? Nó đủ dễ để nhớ rằng đó là 2 ^ 32. Nếu bạn muốn một quy tắc ghi nhớ giá trị của số đó, một quy tắc thuận tiện là để chuyển đổi giữa nhị phân và thập phân nói chung:

2 ^ 10 ~ 1000

có nghĩa là 2 ^ 20 ~ 1.000.000

và 2 ^ 30 ~ 1.000.000.000

Nhân đôi số đó (2 ^ 31) là 2 tỷ và gấp đôi số đó một lần nữa (2 ^ 32) là 4 tỷ.

Đó là một cách dễ dàng để có được ước tính sơ bộ của bất kỳ số nhị phân nào. 10 số 0 trong nhị phân trở thành 3 số 0 ở dạng thập phân.


7
nhưng không phải là 2 ^ 32 - đó là (2 ^ 31) -1
Steve Folly

6

Trong Objective-C (iOS & OSX), chỉ cần nhớ các macro này:

#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 có nghĩa là bạn có sẵn 32 bit để lưu trữ số của mình. Bit cao nhất là bit dấu, điều này cho biết số đó là dương hay âm. Vì vậy, bạn có 2 ^ 31 bit cho số dương và số âm.

Với số 0 là số dương, bạn có phạm vi logic (đã đề cập trước đó)

+2147483647 đến -2147483648

Nếu bạn nghĩ đó là nhỏ, hãy sử dụng Int64:

+9223372036854775807 đến -9223372036854775808

Và tại sao bạn muốn nhớ số này? Để sử dụng trong mã của bạn? Bạn phải luôn sử dụng Int32.MaxValue hoặc Int32.MinValue trong mã của bạn vì đây là các giá trị tĩnh (trong lõi .net) và do đó sử dụng nhanh hơn so với tạo int mới bằng mã.

Tuyên bố của tôi: nếu biết con số này theo trí nhớ .. bạn chỉ đang thể hiện!


2
Hầu hết các máy tính hiện đại lưu trữ số ở định dạng "twos khen". Bit cao nhất (không thấp nhất) là dấu hiệu. Điều gọn gàng với tính năng twos là các số -ve được xử lý theo các quy tắc tràn tự nhiên của CPU. tức là 0xFF là 8 bit -1, thêm nó vào 0x01 (+1) và bạn nhận được 0x100. Cắt các bit trên 8 đến 0x00 và bạn có câu trả lời của mình.
Tom Leys

5

Hãy nhớ điều này: 21 IQ ITEM 47

Nó có thể được mã hóa bằng bất kỳ bảng điện thoại nào, hoặc bạn có thể tự viết một tờ giấy xuống giấy.

Để ghi nhớ "21 IQ ITEM 47", tôi sẽ sử dụng "Hitman: Codename 47 có 21 nhiệm vụ, mỗi nhiệm vụ đều là IQ ITEM".

Hoặc "Tôi làm sạch răng lúc 21 giờ 47 phút mỗi ngày, vì tôi có IQ cao và không thích đồ trong miệng".


Bạn có ý nghĩa de-encoded with any phone padgì với ?
mcExchange
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.