gpt4 book ai didi

c - 在位层面上阅读字符

转载 作者:太空狗 更新时间:2023-10-29 15:17:10 27 4
gpt4 key购买 nike

我希望能够从键盘输入一个字符并以 00000001 格式显示该键的二进制代码。

此外,我还想以一种允许我输出它们是真还是假的方式读取这些位。

例如

01010101 = false,true,false,true,false,true,false,true

我会发布一个想法,说明我自己是如何尝试做到这一点的,但我完全不知道,我仍在尝试使用 C,这是我第一次尝试在如此低的级别上进行编程。

谢谢

最佳答案

对于位调整,使用无符号类型通常更安全,因为带符号负值的移位具有依赖于实现的效果。平原char可以是签名的或未签名的(传统上,它在 MacIntosh 平台上是未签名的,但在 PC 上是签名的)。因此,首先将您的角色放入 unsigned char类型。

然后,您的 friend 是按位 bool 运算符( &|^~ )和移位运算符( <<>> )。例如,如果您的角色在变量 x 中,然后要获得第 5 位,您只需使用:((x >> 5) & 1) .移位运算符将值向右移动,丢弃低五位并将您感兴趣的位移动到“最低位置”(又名“最右边”)。与 1 的按位 AND 只是将所有其他位设置为 0,因此结果值为 0 或 1,这是您的位。请注意,我从左有效位(最右侧)到最高有效位(最左侧)对位进行编号,并且我从零开始,而不是一。

如果您假设您的字符是 8 位,您可以将代码编写为:

unsigned char x = (unsigned char)your_character;
int i;

for (i = 7; i >= 0; i --) {
if (i != 7)
printf(",");
printf("%s", ((x >> i) & 1) ? "true" : "false");
}

您可能会注意到,由于我从右到左对位进行编号,但您希望从左到右输出,因此循环索引必须递减。

请注意,根据 C 标准,unsigned char 至少 8 位但可能更多(如今,只有少数嵌入式 DSP 具有非 8 位的字符)。为了更加安全,请将其添加到代码的开头附近(作为顶级声明):

#include <limits.h>
#if CHAR_BIT != 8
#error I need 8-bit bytes!
#endif

如果目标系统恰好是那些特殊的嵌入式 DSP 之一,这将阻止编译成功。作为注释,C 标准中的术语“字节”表示“对应于 unsigned char 的基本存储单元”,因此,在 C 语言中,一个字节可能有超过八位(一个字节并不总是一个八位字节)。这是一个传统的混淆来源。

关于c - 在位层面上阅读字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185719/

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