C语言强的进

来源:百度知道 编辑:UC知道 时间:2024/06/14 22:10:14
整形变量与字符变量是否在任何情况下都可以互相代替
如 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的不