0
#include <iostream>
#include <string>
#include <bitset>
int main()
{
char c = 128;
unsigned int shift2 = (unsigned int)c;
std::string shift2bin = std::bitset<8>(shift2).to_string(); //to binary
std::cout << " shift2bin: " << shift2bin << std::endl;
unsigned int shift3 = shift2 >> 1;
std::string shift3bin = std::bitset<8>(shift3).to_string(); //to binary
std::cout << " shift3bin: " << shift3bin << std::endl;
}
出力で満たされている理由:unsigned int型の右シフトは常に '1'
shift2bin: 10000000
shift3bin: 01000000
質問>なぜ、unsigned int型の右シフトを:
shift2bin: 10000000
shift3bin: 11000000
次のように私は結果があることを期待しますフィラーとして1を使用しますか?
システム上の 'char'が符号なし8ビット型で、これは普通ではないので、' c'に128を割り当てることはおそらくあなたが望むものではありません( "実装定義の振る舞い"と思います)。現在、 'shift2'の下位8ビットのみを表示しています。 'shift2'の残りの部分を出力して、何が起こっているのかをより深く理解してください。 –
フィラーとして0を使用します。バイナリの 'shift2'は' 11111111111111111111111110000000'です。最後の8桁のみを出力しています。塗りつぶしの桁は重要ではありません。 –
答えはもちろん、符号なし右シフトは1をフィラーとして使用しないということです。しかし、 'unsigned 'は8ビット以上である可能性が高いので、シフトされたフィラービットは見ていません。あなたは 'shift2'がビット9に1を持っているのを見ています。' c'は符号付きの型で負の値が割り当てられている可能性が高いです。 –