我已经为这个问题苦苦挣扎了一段时间了。主函数和转换头文件已经给出,不允许修改,而是使用“void Convert_to_binary(uint64_t number, enum ZERO_OR_ONE bits[])”和“void Convert_to_hexadecimal(uint64_t number)创建一个convert.c函数, uint8_t 十六进制[])"。
就十六进制部分而言,我已经弄清楚了,它用“
”打印出正确的值void convert_to_hexadecimal(uint64_t number, uint8_t hex[]) {
for (int i = 15; i >= 0; i--) {
uint8_t digit = (number >> (i * 4)) & 0xF;
// Store the hexadecimal digit in the array.
hex[i] = digit;
}
}
但是我当前的二进制代码为“
void convert_to_binary(uint64_t number, enum ZERO_OR_ONE bits[]) {
for (int i = 63; i >= 0; i--) {
bits[i] = (enum ZERO_OR_ONE)((number >> i) & 1);
}
}
”我收到输出
1011 0010 1100 0111 1011 1000
“5564275972427363982”而不是
0100 1101 0011 1000 0100 0111
有人可以帮助我解决这个问题并解释我的代码做错了什么吗?
我多次尝试更改代码,尝试将 i 从 63 更改为 64 等,但到目前为止似乎没有任何效果。
0100 1101 0011 1000 0100 0111 1000 0100 0010 0000 1100 0110 0011 0110 1000 1110
enum ZERO_OR_ONE
{
ZERO, ONE,
};
void convert_to_binary(uint64_t number, enum ZERO_OR_ONE bits[])
{
for(uint64_t mask = 1ULL << 63; mask; mask >>= 1)
{
if(number & mask) *bits = ONE;
else *bits = ZERO;
bits++;
}
}
int main(void) {
enum ZERO_OR_ONE arr[64];
convert_to_binary(5564275972427363982ULL, arr);
for(int x = 0; x< 64; x++) printf("%d%s", arr[x], x % 4 == 3 ? " " : "");
}