1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.5707

シフト演算とビット反転
投稿者---松原(2006/05/10 12:40:52)


次のようなプログラムを作成しました。
実行すると「result=0」となると考えていたのですが、答えは何故か「result=F0」です。

これをどのように考えればよろしいのでしょうか。
どなたか分かる方がいっらしゃいましたら、お願い致します。
実行環境は、Visual Stduio .NET 2003です。

#include <stdio.h>

int main(void){
  unsigned char data,result;

  data = 0xff;
  result = (~data) >> 4;
  printf("result=%X\n",result);

  return 0;
}





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:シフト演算とビット反転 5708 YuO 2006/05/10 12:59:20


No.5708

Re:シフト演算とビット反転
投稿者---YuO(2006/05/10 12:59:20)


>実行すると「result=0」となると考えていたのですが、答えは何故か「result=F0」です。
>これをどのように考えればよろしいのでしょうか。

unsigned char型は演算時はunsigned intとして処理されるからです。
つまり,
  result = (~data) >> 4;

は,
  {
    unsigned temp = data; // temp : 0x000000FF
    temp = ~temp;         // temp : 0xFFFFFF00
    temp >>= 4;           // temp : 0x0FFFFFF0
    result = temp;

と等しくなります。
そのため,resultは0xF0になります。



この投稿にコメントする

削除パスワード

No.5709

Re:シフト演算とビット反転
投稿者---松原(2006/05/10 13:10:45)


なるほど、そういうことだったんですね。
解決しました。ありがとうございました。


この投稿にコメントする

削除パスワード

No.5710

Re:シフト演算とビット反転
投稿者---じょーだん(2006/05/10 13:46:47)


>unsigned char型は演算時はunsigned intとして処理されるからです。

普通は、int。


この投稿にコメントする

削除パスワード

No.5711

Re:シフト演算とビット反転
投稿者---YuO(2006/05/10 14:30:33)


>>unsigned char型は演算時はunsigned intとして処理されるからです。
>普通は、int。

ですね。失礼しました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ