0

タイトルはそれを要約しています: uint64_t を左シフトしても期待値が出力されません。その理由を知りたいです。私が得たのは、最上位 4 バイトがゼロになった期待される結果です。Debian Jessie 64bit で x86_64 CPU (Intel i7 3770k) を使用しています。これは、同じ動作を再現するテスト プログラムです。

#include <stdio.h>
#include <stdint.h>

int main(int argc, char * * argv)
{
    uint64_t var = 0xDEFEC8ED;

    printf("%016x\n", var << 24);

    return 0;
}

出力 00defec8ed000000 // expected 00000000ed000000 // obtained

4

2 に答える 2

3

それはuint64_tそうであり、別のタイプが必要ですprintf

#include <stdio.h>
#include <stdint.h>

int main(int argc, char * * argv)
{
    uint64_t var = 0xDEFEC8ED;

    printf("%016llx\n", (unsigned long long)(var << 24));

    return 0;
}

C99以降、これらのタイプを出力するための特別なマクロがあるため、これは完全には正しくありません:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(int argc, char * * argv)
{
    uint64_t var = 0xDEFEC8ED;

    printf("%016" PRIX64 "\n", var << 24);

    return 0;
}

しかし、あなたはそれらを持っているかもしれませんし、持っていないかもしれません。

于 2016-10-14T14:51:55.677 に答える
1

交換:

printf("%016x\n", var << 24);

と:

printf("%016llx\n", (var << 24));

また、それは uint_64 または uint64_t ですか?

于 2016-10-14T14:52:37.553 に答える