番号がどうしても思い出せません。記憶の法則が必要です。
45 に答える
2,147,483,647 です。それを覚える最も簡単な方法は、入れ墨をすることです。
私が考えることができる最も正しい答えは ですInt32.MaxValue
。
基数 10 で値を覚えるのが難しいと思われる場合は、基数 2 を試してください: 11111111111111111111111111111
円周率全体を覚えている場合、探している番号は、円周率の 10 進数の 1,867,996,680 から 1,867,996,689 までの位置にあります。
数値文字列 2147483647 は、Pi の 1,867,996,680 桁に表示されます。3.14......86181221809936452346 2147483647 10527835665425671614...
10桁なので、電話番号のふりをします(米国にいると仮定します)。214-748-3647。私はそれを呼ぶことをお勧めしません。
それを1つの大きな数字と考えるのではなく、それを分解して、関連するアイデアを探してみてください。
- 最大2回のスヌーカーブレーク(最大ブレークは147)
- 4年(48ヶ月)
- 3年(36ヶ月)
- 4年(48ヶ月)
上記は最大の負の数に適用されます。正はマイナス1です。
たぶん、上記の内訳はあなたにとってもう記憶に残ることはないでしょう(それはほとんどエキサイティングではありません!)が、うまくいけば、あなたはいくつかのアイデアを思い付くことができます!
負の最大値 (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
とにかく、この正規表現を使用します (文字列に、Int32.MaxValue を超えない 10 進形式の負でない整数が含まれているかどうかを判別します)
[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]
覚えるのに役立つかもしれません。
それが私が覚えていた方法です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 になりました。
これが少なくとも少し役立つことを願っています。
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 (signed int max) は 2^30 (約 10 億) 倍の 2^1 (2)、つまり約 20 億です。そして 2^32 は 2^30 * 2^2 または約 40 億です。この近似方法は、約 2^64 (エラーが約 15% に達する) まで十分に正確です。
正確な答えが必要な場合は、電卓を使用する必要があります。
便利な単語に合わせた容量の概算:
- 2^16 ~= 64,000 // uint16
- 2^32 ~= 40 億 // uint32、IPv4、unixtime
- 2^64 ~= 16 京 (別名 160 億または 1600 万兆) // uint64, "bigint"
- 2^128 ~= 256 京 (別名 256 兆兆) // IPv6、GUID
適切な電卓を使用して、16 進数モードで「7FFFFFFF」と入力してから、10 進数に切り替えます。
2147483647。
について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 整数は常に署名されていることに注意してください。
パイソン 2
Python には任意精度の整数があります。しかし、Python 2 では、それらは C 整数にマップされます。だからあなたはこれを行うことができます:
import sys
sys.maxint
>>> 2147483647
sys.maxint + 1
>>> 2147483648L
long
したがって、Pythonは、整数がより大きくなるとに切り替わります2^31 -1
2**31 を記憶するためのニーモニックを次に示します。1 を引いて最大の整数値を取得します。
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
私は 2 の累乗から 18 までを覚えるのに十分な頻度で使用してきましたが、それでも 2**31 を暗記する気にはなりませんでした。必要に応じて計算したり、定数を使用したり、2G として推定したりするのは簡単すぎます。
それは 32 ビットなので、2^32 個の異なる値を格納できます。半分は陰性です。
解は 2,147,483,647 です
そして最低は -2,147,483,648 です。
(もう 1 つ負の値があることに注意してください。)
ジョークは別として、本当に役に立つ記憶のルールを探しているなら、私がいつも大きな数を覚えるために使っているルールがあります。
番号を 3 ~ 4 桁の部分に分解し、携帯電話のキーボードのプロジェクションを使用して視覚的に覚える必要があります。画像に表示する方が簡単です:
ご覧のとおり、これからは3 つの形を覚える必要があります。そのうちの 2 つは Tetris L のように見え、1 つはダニのように見えます。これは、10 桁の数字を覚えるよりもはるかに簡単です。
数字を思い出す必要があるときは、形を思い出すだけで、電話のキーボードを想像/見て、その上に形を投影します。最初はキーボードを見なければならないかもしれませんが、少し練習すれば、数字が左上から右下に移動することを覚えているので、頭の中で単純に想像できるようになります。
図形の方向と各図形の桁数を覚えておいてください (たとえば、2147483647 の例では、4 桁のテトリス L と 3 桁の L があります)。
このテクニックを使えば、重要な数字を簡単に覚えることができます (たとえば、16 桁のクレジット カード番号を思い出したなど)。
整数に対してこれを行う最も簡単な方法は、Int.maxInt()のようなものがない場合、16進数を使用することです。理由はこれです:
符号なしの最大値
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
これはどのように作動しますか?これは2進数の戦術と非常によく似ており、各16進数は正確に4ビットです。また、多くのコンパイラは、バイナリをサポートするよりもはるかに優れた16進数をサポートしています。
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、つまり損失は1つの数値だけなので、0x7F ...を使用することは、特に32ビット以上を使用し始めたら、通常、より信頼性の高いコードとの悪いトレードオフではありません。
2GB
(回答の最小の長さはありますか?)
.NETを想定 -
Console.WriteLine(Int32.MaxValue);
たまたまASCIIテーブルを暗記していて、そうではない場合MaxInt
:
!GH6G = 21 47 48 36 47
覚えるのに最適なルールは次のとおりです。
21 (マジック ナンバー!)
47 (覚えておいてください)
48 (シーケンシャル!)
36 (21 + 15、両方のマジック!)
47再び
また、10桁よりも5ペアの方が覚えやすいです。
覚える最も簡単な方法は、 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;
}
興味深いことに、Int32.MaxValue には 2,147,486,647 より多くの文字があります。
しかし、繰り返しますが、コード補完があります。
したがって、私たちが本当に覚えなければならないのはInt3<period>M<enter>
、Visual Studio で入力する 6 文字だけです。
更新 何らかの理由で私は反対票を投じられました。私が考えられる唯一の理由は、彼らが私の最初の発言を理解していなかったということです。
"Int32.MaxValue" は最大 14 文字で入力できます。2,147,486,647 は、コンマを入れるかどうかに応じて、10 文字または 13 文字の入力が必要です。
2^(10*x) は約 10^(3*x) であることを覚えておいてください。おそらく、キロバイト/キビバイトなどでこれに慣れているでしょう。つまり:
2^10 = 1024 ~= one thousand
2^20 = 1024^2 = 1048576 ~= one million
2^30 = 1024^3 = 1073741824 ~= one billion
int は 31 ビット (符号には + ~1 ビット) を使用するため、2^30 を 2 倍するだけで約 20 億になります。32 ビットを使用する unsigned int の場合、さらに 2 倍して 40 億にします。もちろん、大きくなるほどエラー係数は高くなりますが、正確な値を記憶する必要はありません (必要な場合は、あらかじめ定義された定数を使用する必要があります)。おおよその値は、何かが危険なほどオーバーフローに近づいていることに気付くのに十分です。
これが私が覚えている方法です 2,147,483,647
遠くのサバンナ クォーターへ オプティマス トリオ hexed 40 septenary
2 - To
1 - A
4 - Far
7 - Savannah
4 - Quarter
8 - Optimus
3 - Trio
6 - Hexed
4 - Forty
7 - Septenary
Int32は、番号を格納するために32ビットを使用できることを意味します。最上位ビットは符号ビットです。これは、数値が正か負かを示します。したがって、正の数と負の数には2^31ビットがあります。
ゼロが正の数である場合、(前述の)の論理範囲を取得します
+2147483647から-2147483648
それが小さすぎると思われる場合は、Int64を使用してください。
+9223372036854775807から-9223372036854775808
そして、なぜあなたはこの番号を覚えておきたいのですか?コードで使用するには?Int32.MaxValueまたはInt32.MinValueは静的な値(.netコア内)であり、コードで新しいintを作成するよりも高速に使用できるため、コードでは常にInt32.MaxValueまたはInt32.MinValueを使用する必要があります。
私の声明:記憶によってこの数を知っているなら..あなたはただ誇示しているだけです!
Groovyが道を進んでいる場合:
groovy -e " println Integer.MAX_VALUE "
(Groovyは、Javaコンテキスト内でのクイックリファレンスに非常に役立ちます。)
これは私が覚えている方法です...
16進数では、数字は4ビットを表すため、4 * 8 = 32であるため、最大符号付き32ビットintは次のとおりです。
0xFFFFFFFF >> 1 # => 2147483647
バイナリでは、Int32 の最大値は 1111111111111111111111111111111 ですが、10 ベースでは 2147483647 または 2^31-1 または Int32.MaxValue であることがわかります。
とても覚えやすいです。16 進数では 1 桁が 4 ビットです。unsigned int write0x
と 8 f
s ( 0xffffffff
) を Python または Ruby シェルに入力して、10 進法で値を取得します。符号付きの値が必要な場合は、最上位ビットが符号として使用されることに注意してください。だからあなたはそれを省かなければなりません。下位 3 ビットが 1 で 4 ビット目が 0 の数が 7 であることだけを覚えておく必要があるので0x7fffffff
、Python または Ruby シェルに書き込みます。0x100000000 - 1
and と書くこともでき0x80000000 - 1
ます。
C ではINT32_MAX
after を使用し#include <stdint.h>
ます。C++ ではINT32_MAX
after を使用し#include <cstdint>
ます。
またはINT_MAX
、プラットフォーム固有のサイズまたはUINT32_MAX
またはUINT_MAX
の場合unsigned int
。http://www.cplusplus.com/reference/cstdint/およびhttp://www.cplusplus.com/reference/climits/を参照してください。
またはsizeof(int)
。
max_signed_32_bit_num = 1 << 31 - 1; // alternatively ~(1 << 31)
いずれにせよ、コンパイラはそれを最適化する必要があります。
1 << 31 - 1
私はよりも好きです
0x7fffffff
f
countは必要ないため
unsigned( pow( 2, 31 ) ) - 1
あなたは必要ないから<math.h>
これは 2 31 − 1 (32 ビット、1 は符号に使用) です。
おおよその値が必要な場合は、2 10 = 1024 ≈ 10 3を使用するため、2 31 ≈ 2*10 9となります。正確な値を手で計算したい場合は、二乗によるべき乗を使用して 2 32 = 2 (2 5 )を求め、2 で割ります。2 32を得るには、5 回だけ 2 乗する必要があります。
2*2 = 4
4*4 = 16
16*16 = 256
256*256 = 25*25*100 + 2*250*6 + 36 = 62500 + 3000 + 36 = 65536
65536*65536 =65000*65000 + 2*65000*536 + 536*536 =
4225000000 + 130000*536 + (250000 + 3600 + 36*36) =
4225000000 + 69680000 + 250000 + 3600 + 1296 =
4294967296
これを 2 で割って 1 を引くと、2,147,483,647 になります。すべての桁が必要ではなく、最初の 3 桁の有効数字だけが必要な場合、各 2 乗ステップの計算は非常に簡単です。