C言語関係掲示板

過去ログ

No.1044 0を1に、1を0にしたい

[戻る] [ホームページ]
No.13466

補数について
投稿者---T(2004/04/02 10:15:02)


どなたか教えて下さい。

0を1に、1を0にしたい場合の記述はいくつかあると思いますが
補数をつかってする事ってできないのでしょうか?
もっともシンプルで早い処理とわどういったものでしょうか?
宜しくお願い致します。





No.13468

Re:補数について
投稿者---YuO(2004/04/02 11:08:44)


>0を1に、1を0にしたい場合の記述はいくつかあると思いますが
>補数をつかってする事ってできないのでしょうか?

1bit幅のビットフィールドを使う以外では,補数のみの処理では無理です。
例えば,
_Bool invert (_Bool value)
{
    return ~value;
}
というコードを書いたとして,valueは0か1を持ちますが,
~1は最低でも0xFFFEという値を持つため,invertは常に1を返します。


>もっともシンプルで早い処理とわどういったものでしょうか?

速い処理は処理系や実行時のCPUに依存しますし,
何をシンプルとするかは個人の感性に依存します。

個人的には,論理値として扱っている場合は「0に等しくない」によって,
整数値として扱っている場合は「1から減算」によって,
それぞれ実現するのが「シンプル」だと思っています。


No.13469

Re:補数について
投稿者---T(2004/04/02 11:35:04)


ご返答有難う御座います。

>個人的には,論理値として扱っている場合は「0に等しくない」によって,
>整数値として扱っている場合は「1から減算」によって,

まさに今、行おうとしていた処理です。
そもそも論理値と整数値を混在するような使い方は
素人考えなのでしょうか?


例えばですが・・・

uchar fnc(uchar a)
{
static uchar tim_tbl[2] = {10,15};

  Timer = tim_tbl[a];     ←整数値として使用
  /* 処理:aが1なら0 */
  /* 処理:aが0なら1 */

   if(a){            ←論理値として使用
   return(1);
  }else{
   return(0);
  }
}



No.13478

Re:補数について
投稿者---RAPT(2004/04/02 20:50:25)


>   if(a){              ←論理値として使用
>         return(1);
>    }else{
>         return(0);
>    }
σ(^^)だったら…
return (a != 0);
ですかねぇ。
C言語では、論理値の結果は、真は1、偽は0なので。


No.13477

Re:補数について
投稿者---はろはろ(2004/04/02 20:48:49)


>どなたか教えて下さい。
>
>0を1に、1を0にしたい場合の記述はいくつかあると思いますが
>補数をつかってする事ってできないのでしょうか?
>もっともシンプルで早い処理とわどういったものでしょうか?
>宜しくお願い致します。
>

なぜ補数にこだわるのでしょうか?
0→1  1→0 としたいのだけでしたら、

int hoge = 1;
hoge ^= 1;

ではダメなのですか?
>



No.13511

Re:補数について
投稿者---T(2004/04/06 09:00:08)


みなさん有難う御座いました

シンプルにこだわってたんですよ。
上からダメだしされたので・・・(笑)
有難う御座いました。