- 论坛徽章:
- 0
|
回复 75# OwnWaterloo
好,你这里说的的确是一个问题。你少来用这种奇技淫巧来搞我。c 标准对数据的要求只是对编译器而言,要求编译器保证数据精度,但是常规认识是char+char会把char当int来搞。而且,对于文本字符,其实就是int。懂么?我再重复一边:标准只是要求编译器保证计算精度。唉,为了保证你这种智商能懂,免得你给我找借口,给你贴代码,自己去看。- #include <limits.h>
- #include <string.h>
- #include <stdio.h>
- /*
- int main(int argc, char* argv[])
- {
- printf("[%d,%d]\n", CHAR_MIN, CHAR_MAX);
- if (argc>1 && strlen(argv[1])>=2)
- {
- char* p = argv[1];
- printf("%d + %d\n", p[0], p[1]);
- printf("%d\n", (char)(p[0]+p[1]));
- return 0;
- }
- return -1;
- }
- */
- void print0(char i) { printf("%d\n", i); }
- void print1(unsigned char i) { printf("%d\n", i); }
- void print2(int i) { printf("%d\n", i); }
- void print3(unsigned int i) { printf("%d\n", i); }
- #define print(i) printf("%zu\n", i);
- void print4(int i) { printf("%d\n", i); }
- int main()
- {
- char *p = "zz";
-
- print0(p[0]+p[1]);
- print1(p[0]+p[1]);
- print2(p[0]+p[1]);
- print3(p[0]+p[1]);
- print2(sizeof('z'));
- print2(sizeof(p[0]));
- print2(sizeof(p[0]+p[1]));
- print2(sizeof((char)(p[0]+p[1])));
- print2(sizeof((unsigned char)(p[0]+p[1])));
- print2(sizeof(char));
- print2(sizeof(unsigned char));
- print(sizeof('z'));
- print(sizeof(p[0]));
- print(sizeof(p[0]+p[1]));
- print(sizeof((char)(p[0]+p[1])));
- print(sizeof((unsigned char)(p[0]+p[1])));
- print(sizeof(char));
- print(sizeof(unsigned char));
-
- return 0;
- }
复制代码 编译器和编译参数都多试几个,c99 |
|