CおよびC++標準では、数値の特定の表現が規定されていないことを知っています(2の補数、符号と大きさなど)。しかし、ビットを操作するときに特定の制限/保証/予約された表現があるかどうかを知るのに十分な基準を知りません(そしてそれが述べられているかどうかを見つけることができませんでした)。特に:
- 整数型のすべてのビットがゼロの場合、整数は全体としてゼロを表しますか?
- 整数型のビットが1の場合、整数は全体としてゼロ以外を表しますか?(これが「はい」の場合、符号と大きさなどの一部の表現はさらに制限されます)
- ビットが設定されていないかどうかを確認する保証された方法はありますか?
- ビットが設定されているかどうかを確認する保証された方法はありますか?(#3と#4は#1と#2に依存します。たとえば、ある変数の5番目のビット(#5を参照)を設定する方法を知っているので
x
、変数をチェックしてy
、それが5番目のビットは1ですが、機能するかどうかを知りたいですif (x & y)
(私が理解しているように、これは表現の値に依存し、そのビットが実際に1または0であるかどうかではありません)) - 左端および/または右端のビットを設定する保証された方法はありますか?(少なくとも、
char c
すべてのビットをtrue(で設定c = c | ~c
)にして、ハイビットとロービットc = c << (CHAR_BIT - 1)
を設定するよりも簡単な方法です。これらの質問を前提として、私がすべきではないという仮定をしていません)。c = c ^ (c << 1)
- #1の答えが「いいえ」の場合、整数型のビットを繰り返し処理して、それぞれが1か0かを確認するにはどうすればよいでしょうか。
私の全体的な質問は次のとおりです:整数の表現が義務付けられていないという事実にもかかわらず(そしてこの点でCとC ++の標準が異なる場合)、ビットと整数に関してCとC++の標準によって作成された制限/保証/予約された表現はありますか、それらの違いは何ですか)?
私は宿題をしているときにこれらの質問を思いついたので、少し操作する必要がありました(これらは宿題からの質問ではなく、はるかに「抽象的な」ものであることに注意してください)。
編集:私が「ビット」と呼んでいるものに関しては、「値形成」ビットを意味し、「パディング」ビットは含まれていません。