孕妈妈艺术照:C语言强的进

来源:百度文库 编辑:高校问答 时间:2024/04/29 00:27:04
整形变量与字符变量是否在任何情况下都可以互相代替
如 char c1,c2; 与 int c1,c2 是否无条件的等价

不可能。
它们的内存大小都不一样,char 型是 1 字节,int 型是 2 字节或 4 字节,两者不可苟同。

回复:湛蓝水晶
兄弟,请注意:使用0xff做且运算是不对的,这样的话,运算后没有作用
其次:请你看看说明,其实这里是计算机补码在作怪。符号位参加了运算,所以就会出现负值的情况
“但不是任何时候char都可以用int代替,比如char str1[50];如果用int str2[50];的话,在调用诸如strcpy、strlen之类的函数的时候会出错。 ”
这不是废话嘛,str1占了多少空间?str2占了多少空间?

PS:别以为你是谁,可以随便指评别人,不好的
====================================
最讨厌哪个评价别人的答案,
2楼的 86013 - 举人 四级,你认为是必须在0~127才可以负换吗?你应该听3楼的话,回家好好复习一下C语言。
char型是1个字节,范围是0~255,别以为只有ASCII的0~127才是字符,汉字!汉字你懂吗?汉字高端字节就是编码是大于127,不知道你看过察看内存内容没有的?非ASCII字符用什么显示?用“.”显示的。
之所以int型,是因为int型是2个字节的,那么在一个char数据存储到2个字节空间的int的时候是怎么做的?
如果 成立:char c1;int c2;c2=c1,那么int空间的第2个字节的内容是什么?任意数,既然是这样,那么在printf("c1=%d,c2=%d",c1,c2);的时候,c1和c2就是不一样的值,是这样的吗?显然不是这样的,c1和c2是显示的是相同的值这里用了强制转换,只是你不知道而已,系统悄悄的做了。
那么如果:char c1;c1=300;printf("c1=%d",c1);显示是多少了,显然c1取的是低端字节,结果为44=2C,而(D)300=(hex)012C,01高端字节去掉,取低端2C.而且,在转换的时候,int型还要检查char字节的第8位,因为char 是无符号,型,如果第8位为1了,那么转换为int的时候就是负数,而并非是说大于127的不能转换,是因为这个符号位的关系。

真是丢人。不懂就回家好好学学

=============================
普通情况下可以
(有一个叫强制类型转换的),
如下列程序:
int c1,c2;
char c3,c4;

c1=c3+c4;
c3='a';
也可以写成:c1='a'其实就是c1=65(a的ASCII值)
c3=c4=20;//在c3中以ascii值20的字符
c1=c3,c2=c4//都是正确的

晕 讲这么多
他问是不是在"任何"情况下都是```

那个86013说在0--127之间是有道理的,那是一定可以保证完全正确的范围。
因为对于char变量,C没有规定它必须是有符号还是无符号的,是由编译器决定的,至少在我家的编译器(gcc)上,如果有以下语句
char c1=128;
printf("%d\n",c1);
然后输出结果会是-128,多了个负号,因为128在内存中为8位的10000000,然后当成有符号的了,那么转换成int时就高补符号位1,成了-128了。
至于秋风落叶说的汉字用大于128的数据存储,这时候如果直接将汉字对应的内存数据转换成int,会出来一堆的负数的,对于大于127的char型变量用作int参加数值运算时,要先跟0xff做一下且运算。

最后,对你的问题总结回答一下,char c1,c2如果用int c1,c2代替是没有问题的,对于单一变量都没问题;
但不是任何时候char都可以用int代替,比如char str[50];如果用int str[50];的话,在调用诸如strcpy、strlen之类的函数的时候会出错。

在TC里面,char占一个字节,int占两个字节,这就是最大的不同了,char最大只能存255,而int最大可以存65535,它们在内部都是存放的数据的补码,它们可以相互赋值,把char赋给int是没有问题的,int比char要大,但是把int赋给char就要注意了,int高位字节部分会被截掉。如果不是相互赋值的话,两者除了范围大小不同外,用法基本上差不多