这是非常微不足道的,但我没有得到它。
shadyabhi@archlinux /tmp $ ./a.out
2345
51 <-- **Why?**
3
shadyabhi@archlinux /tmp $ ./a.out
abhi
98
50 <-- **Why?**
shadyabhi@archlinux /tmp $ cat main.c
#include <stdio.h>
int main()
{
char a[10];
scanf("%s", a);
printf("%d\n", a[1]);
printf("%d\n", a[1] - '0');
return 0;
}
shadyabhi@archlinux /tmp $
答案 0 :(得分:6)
当a[]
包含您输入的字符串"2345"
时,表达式a[1]
是字符'3'
的字符代码。由于您使用的是ASCII作为基础编码(根据您获得的代码,虽然标准并未严格规定),但'0'
至'9'
字符由小数值{表示{ {1}}至48
(十六进制57
至0x30
)。
换句话说,你有:
0x39
ASCII表是:
| Dec Hex Chr | Dec Hex Chr | Dec Hex Chr | Dec Hex Chr | | 0 00 NUL | 32 20 | 64 40 @ | 96 60 ` | | 1 01 SOH | 33 21 ! | 65 41 A | 97 61 a | | 2 02 STX | 34 22 " | 66 42 B | 98 62 b | | 3 03 ETX | 35 23 # | 67 43 C | 99 63 c | | 4 04 EOT | 36 24 $ | 68 44 D | 100 64 d | | 5 05 ENQ | 37 25 % | 69 45 E | 101 65 e | | 6 06 ACK | 38 26 & | 70 46 F | 102 66 f | | 7 07 BEL | 39 27 ' | 71 47 G | 103 67 g | | 8 08 BS | 40 28 ( | 72 48 H | 104 68 h | | 9 09 HT | 41 29 ) | 73 49 I | 105 69 i | | 10 0A LF | 42 2A * | 74 4A J | 106 6A j | | 11 0B VT | 43 2B + | 75 4B K | 107 6B k | | 12 0C FF | 44 2C , | 76 4C L | 108 6C l | | 13 0D CR | 45 2D - | 77 4D M | 109 6D m | | 14 0E SO | 46 2E . | 78 4E N | 110 6E n | | 15 0F SI | 47 2F / | 79 4F O | 111 6F o | | 16 10 DLE | 48 30 0 | 80 50 P | 112 70 p | | 17 11 DC1 | 49 31 1 | 81 51 Q | 113 71 q | | 18 12 DC2 | 50 32 2 | 82 52 R | 114 72 r | | 19 13 DC3 | 51 33 3 | 83 53 S | 115 73 s | | 20 14 DC4 | 52 34 4 | 84 54 T | 116 74 t | | 21 15 NAK | 53 35 5 | 85 55 U | 117 75 u | | 22 16 SYN | 54 36 6 | 86 56 V | 118 76 v | | 23 17 ETB | 55 37 7 | 87 57 W | 119 77 w | | 24 18 CAN | 56 38 8 | 88 58 X | 120 78 x | | 25 19 EM | 57 39 9 | 89 59 Y | 121 79 y | | 26 1A SUB | 58 3A : | 90 5A Z | 122 7A z | | 27 1B ESC | 59 3B ; | 91 5B [ | 123 7B { | | 28 1C FS | 60 3C < | 92 5C \ | 124 7C | | | 29 1D GS | 61 3D = | 93 5D ] | 125 7D } | | 30 1E RS | 62 3E > | 94 5E ^ | 126 7E ~ | | 31 1F US | 63 3F ? | 95 5F _ | 127 7F DEL |
在使用a[0] = '2' = 0x32 = 50
a[1] = '3' = 0x33 = 51
a[2] = '4' = 0x34 = 52
a[3] = '5' = 0x35 = 53
a[4] = '\0' = 0x00 = 0
的第二种情况下,"abhi"
等于a[1]
,如果您检查上面的表,则为字符代码b
十进制(十六进制{{1} }})。
对于减去98
的输出行,实际上减去0x62
的字符代码,即十进制'0'
或'0'
十六进制。
答案 1 :(得分:1)
这将返回在第二个位置输入的数字的ascii代码,然后返回此数字的值。
如果为'0',则返回48然后返回0.
如果是'1',它将返回49 1,依此类推。
如果您使用的字符不是数字,它将返回其ascii代码,然后返回其ascii代码与ascii代码“0”的差异
基本上,角色的操作(+ - ...)将对其ascii代码进行操作:see here。
所以基本上a[1] - '0'
将返回键入的第二个字符的整数值。
这用于将用户输入转换为atoi()函数中的整数。
答案 2 :(得分:1)
这:http://www.asciitable.com/是ascii表 在你的第一次尝试中你得到51,因为它是'3'(char 3)ascii值 在第二次尝试中你得到50,因为'b'= 98而'0'= 48所以'b' - '0'= 50。
答案 3 :(得分:0)
我看到你正在使用linux。命令“ascii”打印出ascii表。