dポイントプレゼントキャンペーン実施中!

以下のサンプルソースのように、(1)の場合、出力結果が24にならないのはなぜでしょうか?基礎的な質問だと思いますがよろしくお願いします。
---------------------------------------
サンプルソース
#include <stdio.h>


int getValue(unsigned short* us){
*us = 24;
}

main(){
int ret = 0;
int intVal = 0;
unsigned short usVal = 0;

/* (1)int型のintValをunsigned short型にキャストした場合 */
ret = getValue((unsigned short*)&intVal);
printf("%d\n", intVal);

/* (2)unsigned short型のusValをそのまま引数に渡した場合 */
ret = getValue(&usVal);
printf("%d\n", usVal);
}
----------------------------------
出力結果
1572864 ←(1)の結果
24 ←(2)の結果
-----------------------------------

A 回答 (3件)

CPUがビッグエンディアンだからでしょうね。


00 00 00 00(0x00000000=0)
↓00 18(0x0018=24)を書き込む
00 18 00 00(0x00180000=1572864)

リトルエンディアンだとこう。
00 00 00 00(0x00000000=0)
↓18 00(0x0018=24)を書き込む
18 00 00 00(0x00000018=24)
    • good
    • 0
この回答へのお礼

ありがとうございました。当方勉強不足でした。アウトプットの引数のキャストには気をつけます。

お礼日時:2005/03/23 15:08

>リトルエンディアンでintが32bitでしたらそうなるかと。



きゃー(^^;;なにねぼけてるんでしょ!
ビッグエンディアンですよね。
    • good
    • 0
この回答へのお礼

おっしゃるとおりintが32bitです。OSはwindows2000です。ありがとうございました。

お礼日時:2005/03/23 15:09

OSやプラットフォームがかかれていないのですが、


リトルエンディアンでintが32bitでしたらそうなるかと。

1572864 = 0x180000
24 = 0x18

ですから。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!