提示コードですが符号なしと符号ありのビット演算における処理の違いが知りたいです。無論マイナスの値が使えるかどうかの違いですがビット演算になるとなぜunsignedを使うのでしょうか?
cpp
1unsigned int a; 2int b;
参考サイト:http://wisdom.sakura.ne.jp/programming/c/c53.html
参考サイト: https://www.cc.kyoto-su.ac.jp/~yamada/programming/bit.html
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ビット演算になるとなぜunsignedを使うのでしょうか?
処理系依存のコードにしないためでしょう。
C 規格も C++ 規格もシフト演算については、論理シフトか算術シフトか規定していません。
処理系が任意に選択できます。
そのため signed のオブジェクトを右シフトするコードを書くと処理系依存のコードになってしまいます。
投稿2021/09/12 08:19
総合スコア1156
0
a= ~0;
a>>=1;
という演算をした場合、aが符号付きだと結果が変わる場合があります
まあ、こういうややこしいことを考慮しないで済むように、符号なしにするってことで。
投稿2021/09/12 07:11
総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/12 07:25 編集
退会済みユーザー
2021/09/12 07:29
2021/09/12 07:31
退会済みユーザー
2021/09/12 07:34
2021/09/12 07:38
2021/09/12 08:40
0
あ。算術シフトを避ける為ですね……
~~
ビット演算は符号の有無は無視して、そのまま桁ごとに演算がされます。~~
~~
たとえば、
int x = 0; //00000000
をnotで反転
~x
の値は11111111 = -1
になります。
同様に、1
を反転すると-2
になります。
~~
~~
符号があるのに無視されることでおかしな事になるので、unsignedで初めから符号はなかったものとして扱います。
~~
~~
unsigned int x=0;
をnotで反転
~x
の値は11111111 = 255
になります。
同様に、1
を反転すると254
になります。
~~
投稿2021/09/12 07:05
編集2021/09/12 07:12総合スコア1218
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
AND/OR/NOTの世界では符号の有無は関係ないのですが、
ビット演算には左右シフトが現れます。
シフトは最上位を符号ビットとして扱うか否かで演算(処理)が変わります。
ビット演算になるとなぜunsignedを使うのでしょうか?
符号ビットを持たない(どのビットも同じ意味として)演算を行いたいからでしょうね。
前述のとおり、AND/OR/NOTおよびそれらの組み合わせのみで演算が構成されているのであれば
signed/unsigned のどちらも同じ結果となります。
投稿2021/09/12 07:01
編集2021/09/12 16:54総合スコア16612
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。