osx lion上的unsigned char限制为127?
我面临一个奇怪的问题,在我的mac osx狮子上工作(在xcode4 / clang下,虽然它可以用gcc4.2重现)。
看来,我无法为无符号字符变量赋值127以上的任何值。 所以,当我分配
v = (unsigned char) 156;
或者简单地说
std::cout << (unsigned char) 231 << std::endl;
我的程序不会产生任何输出。
当我运行这个代码
std::cout << "Unsigned chars range up to " << UCHAR_MAX << std::endl;
我得到以下输出:
无符号字符的范围最多为255
但是,当我运行这样的程序时,程序每次都会产生一些不同的任意值(例如c = 114,c = 252等)。 for(unsigned char c = 0; c <CHAR_MAX; c ++)std :: cout <<“c =”<< 2 * c << std :: endl;
将CHAR_MAX更改为UCHAR_MAX,程序结束时不再输出:(
提前致谢
cout
正在将数字值转换为字符集中的字符(嗯,它试图......当你没有看到它对你的字符集来说不是一个有效的字符时,并且从技术上讲它是决定这个的终端)。
将其转换为unsigned int
。
编辑补充: ildjarn在他对你的问题的评论中提出了一个非常有效的观点; 如果你在调试器中运行它,你会发现这个值确实是你所期望的。
你期望看到什么符号来表示字符(unsigned char)231
? 在大多数系统中,这些是需要特殊终端设置的扩展字符,如果甚至可见,则显示为任何连贯的字符。
尝试这个:
unsigned char testChar = (unsigned char)231;
unsigned int testInt = (unsigned int)testChar;
std::cout << testInt << std::endl;
unsigned char
的值不限于127,但标准ASCII只有7位(如此128个值)。 高于127的任何值都不代表任何字符(除非使用某种扩展ASCII),因此不会打印任何内容。
上一篇: unsigned char limited to 127 on osx lion?
下一篇: gettime() CUDA