发布网友 发布时间:2024-12-27 04:29
共3个回答
热心网友 时间:2024-12-31 13:55
你这两个写法都不对啊,你要定义十六进制的数的话,不能加双引号或单引号直接这么写:
int a = 0x22;
热心网友 时间:2024-12-31 13:55
#include <stdio.h>
int main(void)
{
int a='0x22';
int b="0x22";
printf("a is %d, b is %d \n", a, b);
return 0;
}
我试了一下,在GCC环境下,编译有2个警告:
test.c:5:8: warning: multi-character character constant
test.c:6:8: warning: initialization makes integer from pointer without a cast
第一个警告百度了下:不同机器对被单引号引起的多个字符的处理方式会有所不同。故而,编译器会报 出以上警告信息。但是我也不知道这里到底是怎么处理的,ASCII码中34对应的是 " (双引号)。
第二个警告是说用指针初始化一个整形数,但是没强制转换。PS:指针是变量的地址,变量的地址还是数,所以能输出?
运行结果是:a is 813183538, b is 134513860 。
热心网友 时间:2024-12-31 13:55
int a='0x22';表示 a 的值是十六进制数。转成二进制为34。
int a="0x22" 中,“0x22”表示一个常字符串。编译是不能通过的。