关于C语言中字符型变量

2025-01-08 01:19:20
推荐回答(5个)
回答1:

你说的没错,将整型按照字符型处理时确实只占有一个字节,但是有件事你需要搞清楚:
内存中字符型只占有1个字节,而整形却占有4个字节(说法不一,以具体机器为主),当你将字符型按整形处理时,整形数据只有最后一个字节是有效的,其余的字节均填充0,而反过来,当你将整形按照字符型处理时,整形的前三个字节会被截断,内存中只保留整形数据的最后一个字节!
一般情况下,我们只将字符型转变成整形处理(整形提升原理),但是也可以将整形转变成字符型处理(此处必须强制转换),而这种转换通常是由于问题的需要而进行的,通常不要这样做,不知道能不能帮助你!

回答2:

是说如果将一个整形数当做字符型类处理的话,那个整形数会被截断,也就是将那个整形数的二进制的低8位保留下来,其他的位丢掉,这种做法会导致数据的精度降低.

char 至少8位
wchar_t 16位字符
short 至少16位
int 至少和short一样大
long 至少有32位,且保证位数不小于int
long long 至少有64位

int i = 123456;
char c = i; //将i赋值给c
if( int(c) == i)
printf("数据未被截断!\n");

else
printf("数据已被截断, c = %d, i = %d", int(c), int(i));

回答3:

C语言中的字符变量为什么可以用正整数赋值?要得到正常的字符,条件是什么?若用负整数赋值情况又将如何?

答:C语言中各种类型的变量其实都是内存地址。都可以通用的。
其中字符型最是最通用的一种,他是八位二进制的。即一个字节,可以存任何一个字节的变量。
如: int a = 0xFF;
char *p = &a;
A在内存中的样式:
低地址高位。

则 *p==0xff;*(p+1)==0;
这个你明白了吧。字符型可以存任何数据。

英文字符实际上是0-127的数字编码存在内存中。我们叫他们ACSII码。电脑在处理这些数据时比如打印:
printf,如果用%d就打印他的的十进制ASCII码,而%C就打印字符。

若用负整数赋值情况又将如何?

负数实际上会变成正数,如-1==255,当然,你要强制转换成unsigned char型的。
下面举个例子:
#include

int main (int argc, char *argv[])
{
char ch = 97;
char ch1 = -1;

printf("ch = %d\n",ch);
printf("ch = %c\n",ch);

printf("ch1 = %d\n",ch1);
printf("ch1 = %d\n",(unsigned char)ch1);
return 0;
}

回答4:

当刚开始学语言的时候,不要太在意它们对内存是不是有什么影响,你只要记得那个类型占多少内存空间就行。
比如CHAR 1个字节。INT SHORT 2个字节,FLOAT DOUBLE 4个字节,LONG 8个字节。
所以不要太在意那方面,在那你没达到一定技术水平之前应当不要考虑,但是思想是好的。

回答5:

“由于字符型和正型在内存中所占字节数不同,因此当整型量按字符型量处理时,只有低八位字节参与处理。”
==>
“由于字符型和正型在内存中所占字节数不同,因此当整型量按字符型量处理时,只有低八bit位(一个字节)参与处理。”