gpt4 book ai didi

c - 按位连接

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:28 25 4
gpt4 key购买 nike

我有以下内容:

char *pointer = decimal_to_binary(192) // yields 11000000
char *pointer2 = decimal_to_binary(168) // yields 10101000

我正在尝试将它们连接成:

1100000010101000

我引用的是:Concatenate binary numbers of different lengths目前正在使用:

unsigned long pointer3 = (*pointer << 16) | *pointer2;

给出输出:

1100010000000000110001

我做错了什么?

最佳答案

你没有展示你是如何打印任何东西的,这使得你的问题难以解释。然而,这个声明已经无可挽回地被破坏了,因为它没有连接 pointer 指向的字符串。和 pointer2 :

unsigned long pointer3 = (*pointer << 16) | *pointer2;

这需要第一个字符 pointer指向 (a 1) 并将值左移 16 位,然后在 pointer2 的第一个字符中添加 (ors)指向(另一个 1 ),并将这种格式的整数分配给错误命名的 pointer3 .因此,它获得了值(value):

pointer3 = 0x00310031;

这个问题需要一些解释,但是做出一些似是而非的(但不一定准确)的假设,这段代码可能会做你想要的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char *decimal_to_binary(unsigned char byte)
{
char *result = malloc(9);
if (result != 0)
{
char *digit = result;
for (int i = 0; i < 8; i++)
*digit++ = ((byte >> (7 - i)) & 0x01) + '0';
*digit = '\0';
}
return result;
}

int main(void)
{
char *pointer1 = decimal_to_binary(192);
char *pointer2 = decimal_to_binary(168);
char concatenated[17];
unsigned long pointer3 = (*pointer1 << 16) | *pointer2;

strcpy(&concatenated[0], pointer1);
strcpy(&concatenated[8], pointer2);

printf("P1 = <<%s>>; P2 = <<%s>>; P3 = 0x%08lX; C = <<%s>>\n",
pointer1, pointer2, pointer3, concatenated);

free(pointer1);
free(pointer2);
return(0);
}

输出:

P1 = <<11000000>>; P2 = <<10101000>>; P3 = 0x00310031; C = <<1100000010101000>>

请注意,代码使用 decimal_to_binary()没有注意避免(误)使用空指针。 decimal_to_binary()的设计也不如恒星;那些free()电话很容易被遗忘。更好的设计是:

void decimal_to_binary(unsigned char byte, char buffer[9]);

调用代码提供写入二进制输出的缓冲区。在 decimal_to_binary() 中还有其他编写循环的方法;有些甚至可能比此处选择的更有效率。

关于c - 按位连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com