gpt4 book ai didi

c - 四个八位字节的二进制表示

转载 作者:行者123 更新时间:2023-11-30 20:07:31 25 4
gpt4 key购买 nike

我偶然发现了这个奇怪的问题。

我有 2 对四个八位位组。

1) 255.255.255.0 (like a subnet mask)
2) 128.127.0.0 (fictive mask)

我的二进制表示是:

1) 11111111.11111111.11111111.00000000
2) 10000000.01111111.00000000.00000000

但是从我的简单应用程序中我得到:

1) 11111111.11111111.11111111.00000000
2) 11111110.01111111.00000000.00000000

我认为这是错误的值,但请纠正我,我认为我误解了其中的一些重要内容。

生成二进制表示的代码是:

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

void PrintBinary(unsigned int n)
{
unsigned int tmp;
int i = 1;
tmp = n;
do{
printf("%d", (n & tmp) ? 1 : 0);
if(i % 8 == 0 && i < 32)
printf(".");
++i;
n >>= 1;
}while(n>0);
printf("\n");
}

int main(int argc, char **argv)
{
unsigned int octet1 = 128;
unsigned int octet2 = 127;
unsigned int octet3 = 0;
unsigned int octet4 = 0;
unsigned int a = octet1 << 24 | octet2 << 16 | octet3 << 8 | octet4;
PrintBinary(a);
return 0;
}

最佳答案

您的主要问题是

tmp = n;

所以一般来说,您正在检查 (n & tmp) 中是否设置了几个位? 1:0

您的掩码应该只设置一位,并且您应该移动掩码,而不是值。

void PrintBinary(unsigned int n)
{
unsigned int tmp = 1 << (sizeof(unsigned int) * CHAR_BIT - 1);
int i = 1;
do{
printf("%d", (n & tmp) ? 1 : 0);
if(i % 8 == 0 && i < 32)
printf(".");
++i;
tmp >>= 1;
}while(tmp > 0);
printf("\n");
}

应提供所需的输出。

关于c - 四个八位字节的二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787812/

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