c语言里面,如果一个大于256的数字,用字符表示会怎样

char fp;
fp=300;
printf(fp);
还有其中的道路是什么
谢谢
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
unsigned char xx[50][80];
int maxline = 0; /* 文章的总行数 */
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{
int i;
char *pf;
for (i=0; i<maxline; i++)
{
pf = xx[i];
while (*pf != 0)
{
if (*pf%2 && *pf*11%256>32)
*pf = *pf*11%256;
pf++;
}
}
}
void main()
{
if (ReadDat())
{
printf("数据文件IN.DAT不能打开!\n\007");
return;
}
encryptChar();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i = 0;
unsigned char *p;
if ((fp = fopen("IN.DAT", "r")) == NULL)
return 1;
while (fgets(xx[i], 80, fp) != NULL)
{
p = strchr(xx[i], '\n');
if (p)
*p = 0;
i++;
}
maxline = i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp = fopen("OUT.DAT", "w");
for (i=0; i<maxline; i++)
{
printf("%s\n", xx[i]);
fprintf(fp, "%s\n", xx[i]);
}
fclose(fp);
}

呵呵,如果你说的字符是C的话,一个字符多大?一个字节。
一个字节能表示多大的数据范围?256。

明白ASCII嘛为什么最多只编码到256?

超过256的数字?定义成单字节字符,那这个字符用什么值存?

所以:如果大于256的字符,就不是单字节字符了。
双字节字符编码方式多了,例如unicode、GBK等等,编码不一样同样一个值,字符也不一样,所以才有乱码。那又是另外一个话题。追问

那c里面到底是用的单字节还是双字节呢,因为字符型变量确实输出了乱码。。谢谢

追答

当然是单字节!
你说的乱码是在什么场合出的,可以描述清楚一点吗?
什么程序,输出的是什么?是不是带中文?什么操作系统?

追问

字符型变量是不是不止限于assic码呢,如果字符型变量大于256是不是就是会有汉字之类的乱码?

追答

如果是有汉字,在C中是用连续两个字符来存储。
因为是两个字符存储一个汉字,在对字符的处理过程,一定不能有将这两个连续字符分拆开或顺序打乱的情况,否则很可能乱码。

如果字符串没有被打乱,那么就是和显示有关。
如果连续两个字符存储了汉字,得看在什么情况下输出,必须要求输出要能支持汉字。如果是unix和linux,必须有汉字的字库(相关字体服务要启动),并且你输入汉字时用的编码,和你终端的编码要一致。(unix/linux看看LANG环境变量)

如果是windows,得看你的程序是怎么写的,是终端程序还是图形程序。输入的时候是什么字符编码状态输入。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-14

截断处理,即从最低位起截取8位二进制码作为结果。如:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
    char x=257;//这里会有警告,就是在说x放不下257,把257截断处理了
    printf("%d\n",x);
    return 0;
}

输出是1。

第2个回答  2012-09-10
256的二进制是1 0000 0000,执行过程中直接把后8位给了字符变量fp,所以结果是0
C语言中如果给一个字符变量赋值,那就直接切8位即一个字节内存中的内容给他,其他的忽略掉
第3个回答  2012-09-10
超过255,又回从0算起
比如256,就是0,257就是1
第4个回答  2012-09-10
字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待, 取值范围总是0~255)。追问

那为什么字符型变量会输出乱码,不应该限于assic之内吗

追答

ASCII 的范围是 0 到 127,故而 7 位(Bit)就足以表示全部 ASCII。Char 一般占用 8 位内存单元,表示ASCII绰绰有余。许多系统都提供扩展ASCII(Extended ASCII),并且所需空间仍然在 8 位以内。注意,不同的系统提供的扩展 ASCII 的编码方式可能有所不同!

300=0x12C

相似回答