Arrays 数组中的值即使在c中更改后也将打印为0
因此,我使用Arrays 数组中的值即使在c中更改后也将打印为0,arrays,c,Arrays,C,因此,我使用typedef unsigned char byte创建了一个自定义类型,然后声明它的数组,就像使用byte mem[255]。我使用了mem[0]=0x10100000初始化第一个值,但当我使用printf(“%d”,mem[0])打印它时我得到0。为什么?您给它分配了十六进制数0x10100000,它远远大于一个字符,因此不能存储在字节中。如果您想使用二进制数,并且您的编译器支持此功能,您可以尝试改用0b10100000。您不能在8位变量(mem[0])中放入32位值。你可能是有
typedef unsigned char byte创建了一个自定义类型
,然后声明它的数组,就像使用byte mem[255]代码>。我使用了mem[0]=0x10100000
初始化第一个值,但当我使用printf(“%d”,mem[0])打印它时代码>我得到0
。为什么?您给它分配了十六进制数0x10100000
,它远远大于一个字符,因此不能存储在字节中。如果您想使用二进制数,并且您的编译器支持此功能,您可以尝试改用0b10100000
。您不能在8位变量(mem[0]
)中放入32位值。你可能是有意这样做的吗
*(int *)mem = 0x10100000;
无符号字符
通常只能保存0到255之间的值。十六进制值0x10100000远远超出该类型的范围,因此(基本上)只使用该值的低位字节,即0
大概您想要使用一个二进制常量。并不是所有的编译器都支持,但那些支持的编译器会将其指定为0b10100000。对于没有的字符,可以使用十六进制值0xA0。无符号字符
只能保存((10x10100000
是一个32位的值。您的意思可能是0xa0
0x10100000
的存储容量远远超过了无符号字符的存储容量,您意识到这不是二进制数,对吧?这是十六进制无符号文字。如果您的编译器非常新,并且支持即将推出的C23标准(或者有一个允许它的扩展)然后你可以使用前缀为0b
的二进制代码,就像0b10100000
@Someprogrammerdude一样,如果你没有那么幸运的话,你可以使用一些模板技巧来达到目的:。似乎不太可能。是的,我把它搞错了…我不小心用了b而不是x,并错误地定义了它们。是的,我应该用“b”来代替,但我把它们混在了一起P
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("%u\n", (1 << CHAR_BIT) - 1);
}
#include <stdio.h>
#include <limits.h>
#include <string.h>
typedef unsigned char byte;
int main(void)
{
byte mem[100];
memcpy(mem, &(unsigned){0x10100000}, sizeof(0x10100000));
for(size_t index = 0; index < sizeof(0x10100000); index++)
{
printf("mem[%zu] = 0x%hhx\n", index, mem[index]);
}
}
mem[0] = 0x0
mem[1] = 0x0
mem[2] = 0x10
mem[3] = 0x10
#define b00000000 0
#define b00000001 1
#define b00000010 2
#define b00000011 3
/* .... */
#define b11111110 254
#define b11111110 255
mem[0] = b10100000;