从阵列所需的输出我有一个数组:未接收用C
int arr[]={'1','2','4','8','16','32','64','128'};
我正与这行调用它:
a=arr[a];
然而,我没有得到所期望的输出。输入与预期的一样(我已经检查过,它从0-7),但输出依据输入而变为49,50,52,56,49,51,54,49
。我做错了什么?
编辑:引号表示ASCII。知道我错过了简单的事情。
从阵列所需的输出我有一个数组:未接收用C
int arr[]={'1','2','4','8','16','32','64','128'};
我正与这行调用它:
a=arr[a];
然而,我没有得到所期望的输出。输入与预期的一样(我已经检查过,它从0-7),但输出依据输入而变为49,50,52,56,49,51,54,49
。我做错了什么?
编辑:引号表示ASCII。知道我错过了简单的事情。
阵列中的初始值设定为字符文字,不int
值,以便该阵列将与每个字符文字(多字节字符文字的数值来填充,如'32'
,被允许的,但被限定其值的实现,见How to determine the result of assigning multi-character char constant to a char variable? )。
以获得所需的输出使用int
文字:
int arr[]={1,2,4,8,16,32,64,128};
输出是正确的。例如,49是字符'1'
的ASCII值,这是数组中第一个条目的ASCII值。
Gah,ascii,知道这是简单的事情。谢谢! – 2013-03-18 15:32:42
在此声明int arr[]={'1','2','4','8','16','32','64','128'};
中,您正在存储ascii值,因为您声明它们是字符串。因此,的49
为1
的值,50
为2
,52
为4
,56
为8
,49
为16
1
,51
用于32
3
,54
用于64
6
和49
用于128
1
,其被检索时索引到数组中。
int arr[]={'1','2','4','8','16','32','64','128'};
你应该声明你arr
数组作为char
而不是int
。
获取数字而不是字符的确切原因是您使用的输出库被称为int
参数。从这一点上,图书馆理解你给它的数据应该被解释和显示为数字。
此外,您得到的数字是ASCII或数组等效值。
这是真的在8051吗?! – 2013-03-18 15:31:31
为什么不用'(1 << a)'代替? (除了明显的数组初始化错误已经包含在答案中) – 2013-03-18 15:31:47
你的数组应该是'const'。此外,启用(moar!)编译器警告,因为“16”是一个多字符字符,它很少有用,因此倾向于生成警告。 – unwind 2013-03-18 15:35:01