C/C++言語の問題です
■ このスレッドは過去ログ倉庫に格納されています
ある実態を持つ4バイトポインタ、*pのアドレスから、24バイトのアロケートを行った。
ポインタを3回動かしたあと、
short *q=(short *)p;
としたあと、q+=3をした後、qに対して、0x000000FFを書き込んだ。
この環境がリトルエンディアンだった場合、*p[1]に入る値を述べよ リトルエンディアンて聞くたび子供のインディアンが浮かぶ おい、まさかお前らわからないなんてことはないよな? >>6
今どきいない
マイコンも高級言語で書けるし >>8
そんなポインタの動かし方はしないだろ
ハグの温床だぞ >リトルエンディアンだった場合
バス幅と86系か68系かで結果が変わるんだが条件の提示が雑すぎる
たぶんニワカの作った問題 char *cでいうと
pはc[0]
qはc[6]
0x000000ffをqに対して書き込むと
c[6]がFFで、7番目から00になる
で、1バイト足りないため、000000??になる。
リトルエンディアンでのアロケートという言葉は初期割当はゼロ。
既に割り当てられた領域を再利用する場合はアロケートじゃなくメモリ移動になるから00
ゆえに
00000000になる。 >>13
バス幅では変わりません
x86とx64でも変わりません
intというなら環境で変わるけど4バイトポインタとshortだからね? 量子コンピュータ研究者の俺からすると、国語でいうところの古文の問題に見えるな >>18
16ビット固定だよ
intは16から64まで変わる
longは32から64まで変わる 情報系の試験もそうだけどなんでわざわざ文章で書くんだろ 16ビットcpuのintは2バイトでshortと同じ
32ビットcpuのlongは4バイトでintと同じ
64ビットcpuのlongは64ビットだけどwow64によりwndowsはlong4バイトとなる
その代わり、linuxのlongと互換性を持たせるため、longlong型を用意した
Int16 Int32みたいなのは、intって結局何バイトなのさ!ってのを表すために規約で後にバイト数を書くことになってる
gitをあさるとArrayに数値を入れた配列とかの定数をつけるコードがあるけど
あれはドットネットの規約ルールだから 嘘つくなよ
shortは1byteで定義されてる場合もあるぞ short は int 以下なら何 byte でも良いんじゃなかったけ?
2 byte と 4 byte の処理系があったと思う。 >>16
68系すら知らないニワカがドヤてんじゃねーよ >>27
68系CPUしってるからこそx64とx86出したんだけど?それとも8081はねってやればよかったのか?
やっても答えは、『同じ』だよバーカ >>30
やっぱり知らねーじゃねーかバーカ
68はインテル系じゃねーよ知ったかぶり野郎 >>32
おまえは本当に馬鹿だな
モトローラ系でも同じだと言ってるだろカス IBMPC互換でもモトローラでもアタリでも、AMDでもCyrixでも変わらねーんだよボケ
○○ビットcpuと言ってる時点でわからんのか?
68系って言い出した時点で、○○ビットCPUなんだからな
intel loadの話ししてて
k5,k6,D10とか言っててもクセーだけなんだよ エンジニア同士のレスバで真実が一つしかない場合
自分で調べる必要があるからレスバを見てる分は勉強になる >>14
>>35
n回動かすのを+nとansiで定義してる 情報が少ない
shortの幅は処理系定義
ポインタ型によってインクリメントの移動値は変わる。
pがshort *と互換の無いポインタであればエイリアジングルールに違反する なので未定義動作
処理系とソースコードが書かれていれば混乱しないかもしれん これは機械工学上、動かすためには力が必要だろ
マイナスのエネルギーで!とか言わないから、+方向は動かす、-方向は振る、と表記してる >>39
実ソースならアライメント調整があるからな >>33
なんでコンパイラの説明書の付録を持ってくるの? K&Rでは「shortは少なくとも16ビット以上の整数」以外の条件は無いと明記されてる >>38
インクリメントするとか進めるなら分かるけど動かすとは言わねーだろ
マイナスに動かす可能性もあるじゃん ansi cの規格なんて初めて漁ったわ
けどshortの規定は今と同じだな
最大最小値しか規定されない
http://port70.net/~nsz/c/c89/c89-draft.html#2.2.4.2 ■ このスレッドは過去ログ倉庫に格納されています