关于字符(char)的问题:难道字符不是8位(8 bits)?
关于字符(char)的问题:难道字符不是8位(8 bits)?
最近正好针对字符得编程做得多一些。发现了一个问题,在Visual C++和C++ Builder 平台都存在的问题。
编译环境:缺省设置。
根据MSDN的解释,在C++中,char 是一个字节(8bits),unsigned char 也是一个字节(8bits)。两者具有共同的数据范围:0x00到0xFF,如果用它们表示整数的话,范围分别就是-128到127,0到255;但用16进制表示都是一样的:即00到FF。
但是在输出时,发生了奇怪的现象:
代码:
......
char x = 0x80;
CString str;//CString 是MFC定义的字符串类。
str.Format("%X",x);
......
结果:
str显示为32bit的数:FFFFFF80,显然,与MSDN的描述矛盾了。MSDN说是8bits,结果却是32bits!!!
如果,给x赋的值小于等于0x7F,那么str的内容只有8bits,与MSDN的描述一致。
又如果把上面的变量x声明为unsigned char ,则不论给x赋何值,str的内容永远都是8bits,与MSDN的描述一致。
上面的问题在C++ Builder平台也是如此。