本文主要是介绍2021年五月九日 c语言学习日志,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
教材中一个地方我不明白 :c语言4个独立的ASCⅡ码存储到一个32位的整型变量中。
int定义一个变量,用这个变量存储一个字符时,输出的是字符对应的ASCⅡ码,但是用这个变量存储字符串时,出来的数字我看不懂。
下面附上
代码一
#include <stdio.h>int main( void ){char grade = 'A';char level = 'FATE';int x = 'FATE';char ch = 97;printf(" grade = %c level = %c ch=%c x = %d\n ", grade ,level ,ch, x);return 0;
}
和运行结果
更新:::
经过一番查找,在好友的帮助下找到了这样一个回答\
字符串"AB"可以用ascII码表示吗? 如何表示_百度知道 (baidu.com)
代码二为:
#include<stdio.h>
#include<string.h>
int main(void)
{
union bt
{int k;char c[3];
}a;a.k=0;strcpy(a.c,"AB");printf("%o,%o\n",a.c[0],a.c[1]);printf("%d\n",a.k);a.k=2;printf("%o,%o,%o\n",a.c[0],a.c[1],a.c[2]);printf("%d\n",a.k); return 0;
}
下面是我修改过的版本,为了更直观的感受联合体。这里还有一个问题,在代码第二部分,设置k=10及其大于10的数时,a.c[0]输出的是k+2,小于10时,a.c[0]输出的是原值
#include<stdio.h>
#include<string.h>
int main(void)
{
union bt
{int k;char c[3];
}a;a.k=0;strcpy(a.c,"AB");printf("%o,%o\n",a.c[0],a.c[1]);printf("%c,%c\n",a.c[0],a.c[1]);printf("%d\n",a.k);a.k=10;int i;printf("请输入两个字母");for(i=1;i<3;i++){scanf("%c",&a.c[i]);getchar();}printf("%o,%o,%o\n",a.c[0],a.c[1],a.c[2]);printf("%d\n",a.k); return 0;
}
up查找了了大小端、union、字符串和字符数组,的相关知识,但是还是没有对所有问题得出一个肯定的答案,只能猜想一下答案:
首先是‘AB’的ascⅡ码是怎么计算的:反斜杠 8 进制 ASCII 值表示: "\101\102",八进制的101和102 可写成16进制 41,42。
printf("%d\n",0x4241);,就是 十进制 16961;而printf("%d\n",0x4142);,就是 十进制 16706
然后,
对于代码一中的:int x=‘AB’,输出x时是根据字符串输出的,所以的是正序的ascⅡ码16706;
而对于代码二,在union中由于共享内存,a.k的值被后面的 strcpy(a.c,"AB");语句更改,所以输出的也是‘AB’的ascⅡ码,但是这里存在一个大小端的问题(这个我还没搞明白为什么前后两个输出的不一致),导致AB逆序输出ascⅡ码16961。
这篇关于2021年五月九日 c语言学习日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!