ザ・雑談スレ
- 1:名無しさん@故郷VIP2023/06/03(土) 00:16:41 ID:FzkB+/R20
- なんでもありのオールジャンルで雑談しようぜ
前スレ
http://hato.1ch.nl/test/read.cgi/hurusato/1425208965/
三スレ目やね過疎なふる速なのに
- 84:名無しさん@故郷VIP2025/02/01(土) 07:26:02 ID:lQzE0ZGd0
- >>83
俺的整理復習まとめ兼ねて
変数を宣言するんや。型も指定せんといかんで
int i; ←int型の変数iを宣言&確保やで
double d; ←倍精度タイプの変数dを宣言&確保やで
int *p; ←int型の変数*pを確保や。で、*pには値が・pにはメモリアドレスが入るんや
変数から取り出す。その結果は??
int i; i = 3; printf("%d", i ); 結果 >3
double d; d = 3.14; printf("%f", d ); 結果 >3.14
int *p; *p = 4; printf("%d", *p ); 結果 >4
int pTmp; int *p; p = &pTmp; *P = 4; printf("%d", *p ); 結果 >4
int pTmp; int *p; p = &pTmp; *P = 4; printf("%p", p ); 結果 >0x7fffc92f3dcc
変数は名前だけ見ただけじゃ型がわからん。これは自分で管理せにゃいかん
(宣言部見んとわからん。 ポツンと 変数x て言われても、xの型はわからんものらしい)
ここで。Cは変数宣言時に一発で価を入れちゃえる書き方があるわけ
int i; ← 変数を宣言
i = 3; ← 変数に値を代入
int i = 3; ← 上の二行の命令を一発でできる書き方
俺がこんがらがった↑のレスを分解すると
int *p; ← ポインタ変数pを宣言。同時に、pのアドレスの内容を*pで取り出せる
*p = &x; ← あれ?*pは内容のほうだろ?*pにアドレス入れちゃうのおかしくね???
こういう風に考えておかしくね?逆じゃね?とこんがらがっちゃったわけさね
- 85:名無しさん@故郷VIP2025/02/02(日) 11:53:09 ID:rAPoknMx0
- わからんでもないwwww
俺も昔整理して覚えようとして
「記号が付いてるのがアドレス」て覚えようとして
大混乱したことがある
今は理解してるし間違えないけど
こういう一発で覚えちゃって間違えない題目みたいなのが
あったら初心者さんは覚えやすいし間違えにくい
と思うんだけどな
なんかそういうのないのかな
- 86:名無しさん@故郷VIP2025/02/11(火) 19:24:26 ID:dKv6Dogx0
- うーんintの桁数は16bitだったり32bitだったり64bitだったりすると
例えば8bitのパソコンだと8bitだったりもするんだろうか
- 87:名無しさん@故郷VIP2025/02/13(木) 14:03:12 ID:Z8fdQTmW0
- >>86
8bitのCPU(Z80やら8080やら)でも通常は16bitだお
Cのそういう定義は元々はコンパイラ作る人が勝手に決めやがれ的な
もんだったけどだんだん後から定義を追加してったって歴史がある
だから、intなんかの定義が決められる前にあったものには新定義は
当てはめないようにしてる(互換性のため)
極論だけど、86が自分でコンパイラ作って、「俺のコンパイラでは
intは6bitだぞ!」て決めても別に構わない。
(違反にはならない。まあ顰蹙は買うがそれは別の話w。当然構わない
からってそんなことする人・した人はほぼいなかったわけで)
MSXやPC8001が現役の時代でもすでに16bitの機械は存在してて、かつ、
サーバーやらワークステーションやらでは使われていた
なので、8bit機用のコンパイラでもほぼint=16bitが普通だったわけ
現在は64bitCPUが当たり前になってるけど、慣例通りにintも64bitにって
するとあまりにも大きすぎるんで16bit・32bitが多いかなって感じ
- 88:名無しさん@故郷VIP2025/02/19(水) 21:48:38 ID:12X0H1X80
- >>87
非常にサンコス
もしかして大ベテランな方でしょうか
歴史的な意味合いやらは意外と整理されてないんで
こういう情報はすごくありがたいです
- 89:名無しさん@故郷VIP2025/02/22(土) 09:27:49 ID:1k7c92S20
- Cかあ
ベタで悪いがMSX-C手に入れてポインタとライブラリで挫折したヲレorz
- 90:名無しさん@故郷VIP2025/02/23(日) 14:48:26 ID:Cuu84FKL0
- 最底辺な質問ですみません
今のCPUは64bitが普通って聞いてるんですけど
メモリーの1単位ってCPUと同じじゃないんですか???
- 91:名無しさん@故郷VIP2025/02/24(月) 00:40:14 ID:xHqOjJBs0
- 今でも8バイトが最低単位じゃなかったかな確か
(1ビットとかはあるけど多分>>90が聞きたいことはそれじゃないと妄想)
CPUと同じっていうのは多分、アクセスできるor指定できる範囲のことだと
思う
CPUの内部はレジスタっていう値をセットしたり計算したりできる部分が
あるんだけど、メモリにアクセスしたい場合に何番地にアクセスせよって
指定をするんだけど、これもそのレジスタが担当してるんよ
Z80(8bitCPU)だとレジスタが8bitだから、指定できるアドレスの範囲は
0x00(0)〜0xFF(256)番地までしか読み書きできない
8086(16bitCPU)だと指定できる範囲は
0x0000〜0xFFFF(65535)番地まで
80486(32bitCPU)だと
0x00000000〜0xFFFFFFFF(4294967295)番地まで
(物理的に沢山メモリを積んでもOSやCPUが32bitだと4GBまでしか認識しない
のはこのため)
ちなみに実際の機械だと特殊な方法を使って無理やりメモリ範囲の制限を
超えてたのも結構あったよw
たとえばPC-98とか。16bitCPU+MS-DOSなのに8MBとか読めたりw
- 92:名無しさん@故郷VIP2025/02/24(月) 11:18:40 ID:Kpl1t8DG0
- ごめん手癖で書いて単位表記ゆれゆれだった
1ビット( 1bit )
0と1しか表現できない。電気的な最低単位
1バイト( 1Byte )
8ビットのこと。256まで表現できる
多くのPCでの最低単位
CPUの能力を表す場合、なぜかbitを使う。
Z80や8080は「1バイトCPU 」と言えなくはない気がするけど
表現は「 8ビットCPU 」とほぼ統一されてる
1メガバイト( 1MB )
1024バイト( 8,168ビットといえなくもない?)
後は1024倍ごとに単位が上がっていく
なんで1000じゃないのかは二進数表現なんでどうしようもないんで
そういうもんと考えるしかない
ちなみに、1MBは1024Byteだけど、1000Byteってのも存在するよね?
これとの混同をしないように、1000Byteは1000バイト、1024バイトは1MBと
表記するのが普通
23KB