1

私は次のコードを実行していました。基本的に、 cinオブジェクトを介して入力された文字の数字を切り捨てます。問題は、文字オブジェクトにint値を割り当てると、最初の数字以外の数字がどのように切り捨てられるかわからないことです。

#include <iostream>
using namespace std;
int main(){
    unsigned int integer;
    unsigned char character;
    cin >> integer;
    character = integer;
    cout << character ;
}
4

2 に答える 2

4

問題は、文字オブジェクトにint値を割り当てると、最初の数字以外の数字がどのように切り捨てられるかわからないことです。

説明のために、charが符号なしで8ビット幅で、int32ビット幅であると仮定します。このような割り当てでは、上位24ビットを切り取り、下位8ビットを残します。

切り捨ては、整数の10進数とは何の関係もありません。たとえば、(ので)9999になります。159999 & 0xFF == 15

于 2013-01-05T16:11:32.543 に答える
1

「最初のものを除いて」とはどういう意味かわかりません。しかし、私が何が起こっているのかを説明できるかどうか見てみましょう。

unsigned charこれは、標準で1バイトの長さが要求されていると思います。int通常ははるかに長く、4バイトが一般的です。したがって、255を超える数値を入力すると、それを超えるすべての値が失われます。これは、保持できるのは1バイトだけであり、先頭の3バイトのデータが失われるためです。

于 2013-01-05T16:12:56.383 に答える