gpt4 book ai didi

c - 在 C 中将按位值显示为整数

转载 作者:行者123 更新时间:2023-11-30 19:32:08 27 4
gpt4 key购买 nike

我正在尝试将 16 位数字的最后 4 位显示为“密码”该循环使用从末尾开始的第 4 位开始的掩码进行初始化,并将各个位的值(第 4 位、2^3、第 3 个 2^2 等)相加,但它始终返回 0。

有两个函数,一个函数提示用户输入代码,该代码将用作 16 位数字,从中获取 4 位。

#define _CRT_SECURE_NO_WARNINGS     
#include <stdio.h>
#include <conio.h>

int get_code();
void display_binary(int num);

int main()
{
int code, password, signal, missiles, ctr;

code = get_code();
printf("\nThe code is %d\n", code);
printf("The code in Hexadecimal: %X\n", code);
printf("The code in binary:");
display_binary(code);

int sum = 0;
int mask = 1 << 3;
for (ctr = 3; ctr >= 0; ctr--)
{
if ((mask & code) == 1)
sum = sum + pow(2, ctr);
else
sum = sum + 0;
mask >> 1;

}

printf("\n\nThe password is %d\n", sum);


_getch();
return 0;
}

/*===============================
get_code
no input
int output
prompts user for number
===============================*/
int get_code()
{
int num;
do
{
printf("Enter a whole number between -4000 and 4000, inclusive: ");
scanf("%d", &num);
} while (num > 4000 || num < -4000);
return num;
}

/*================================
display_binary
int input
no output
displays number in binary
===============================*/
void display_binary(int num)
{
int mask = 1 << 15;
int ctr;
for (ctr = 1; ctr <= 16; ctr++)
{
if ((mask & num) == 0)
printf("0");
else
printf("1");
if ((ctr % 4) == 0)
printf(" ");
mask = mask >> 1;
}
}

最佳答案

此代码中有两个错误导致“密码”无法显示:

int sum = 0;
int mask = 1 << 3;
for (ctr = 3; ctr >= 0; ctr--)
{
if ((mask & code) == mask) // <=== not '1' but 'mask'
sum = sum + pow(2, ctr);
else
sum = sum + 0;
mask >>= 1; // <=== '=' was missing

}

但是当然你可以简单地做

int password = code & 0x0F;

(mask & code) == mask 的原因是 mask & code 结果将清除除该位之外的所有 code 位在掩码中。正如上面所评论的,您也可以简单地执行

if (mask & code) 

因为在 C 语言中,mask & code 的任何非零结果都会被评估为 true。

此外,pow() 计算 2 的幂是多余的,因为您可以使用位移位,就像代码中其他地方所做的那样

sum = sum + (1 << ctr); 

sum += 1 << ctr;

关于c - 在 C 中将按位值显示为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387308/

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