基本上一个 char 是 8 位长(1 个字节),它可以为有符号字符保存 -128 到 127 值,对于无符号字符可以保存 0 到 255 值......并且在任何编译器中,无论是 16 位还是 32 位,它只占用 1字节.......
现在,下面解释了获得 -ve 数字背后的故事......
由于上面显示了有符号和无符号字符的范围,因此每当编译器遇到超出最大值的值时,编译器就会从头开始重新启动。
例如:对于有符号字符,如果值超过 127,它会返回一个 -ve 数字,即有符号字符的起始范围。对于 128,它返回 -128。对于 129 - (-127) 等。
同样适用于无符号字符...
样品 pgm:
#include<stdio.h>
#include<conio.h>
int main()
{
char ch1 = 128;
unsigned char ch2 = 257;
printf("%d\n %d",ch1,ch2);
getch();
}
o/p:-128
1
示例程序 2:
#include<stdio.h>
Void main()
{
unsigned char ch;
for(ch=0;ch<=255;ch++)
{
printf("%d-%c",ch,ch);
}
}
该程序应打印 ASCII 值和相应的字符。但它不会。这个程序是一个无限循环。原因是 ch 已被定义为 char。并且 char 不能取大于 +127 的值。因此,当 cha 的值为 +127 并且我们执行 ch++ 时,它变为 -128 而不是 +128。-128 小于 255,因此条件得到满足。从这里开始 ch 将采用 -127,-126,-----,-1,0,+1,+2,------,+127,-128,-127 等值。希望这会有所帮助..