c/c++ char 默认是由系统决定的?!
c4droid吧
全部回复
仅看楼主
level 13
小牛_牛sky 楼主
此帖无图有真相
2016年07月05日 23点07分 1
level 13
小牛_牛sky 楼主
这几天测试一些东西,然后用到了char,网上有关的char都是认为默认是signed char,也就是说取值范围在[-128,127],这个在windows的vs中我得到了很好的验证
但在c4中,却略微不同了
看下面例子
2016年07月05日 23点07分 2
level 13
小牛_牛sky 楼主
#include<iostream>
using namespace std;
int main()
{
char*text="严";
for(int i=0;i<strlen(text);i++)
printf("%x ",text[i]);
//c4中默认为unsigned char
signed char ch = 0xe4;
printf("%d",ch);
return 0;
}
2016年07月05日 23点07分 3
level 13
小牛_牛sky 楼主
严的utf-8编码是 e4 b8 a5
然后一开始我把0xe4赋值给char,输出 显示228
很显然,如果char默认为signed char的话,那么
超出范围了,
然后我定义类型为给signed char,输出为-28
所以
个人观点
char的有无符号位是由编译器决定的 当使用char时最好显示定义 免得结果出乎意料 而又无从下手
2016年07月05日 23点07分 9
level 8
char大部分编译器都是有符号的,但arm的编译器和gcc的arm编译却是个例外。。。
2016年07月11日 14点07分 10
应该是由编译器指定的吧?
2016年07月11日 21点07分
level 8
测试了下c4的tcc,默认也是无符号的。。。貌似只要是arm架构的编译器,char都是无符号的
2016年07月11日 14点07分 11
level 14
我觉得没必要这样,char就是char别把它当数字看就行了,表示从来不纠结它是signed还是unsigned,因为做比较的时候是=='x',printf的时候是用%c,也很少看见哪个大项目会这么做。
2016年07月11日 15点07分 13
前几天要获取utf-8来着,。。
2016年07月11日 21点07分
level 13
这种时候就应该看标准文档,
我当年看过一点,有提到这个,
char是否有符号就是未定义的,
毕竟不管怎样ascii只到127,
2016年07月11日 20点07分 14
对的,c4的标准文档在哪
2016年07月11日 21点07分
@小牛_牛sky 什么鬼,我说的是c语言的标准文档,百度下载个c99或者c11标准文档,
2016年07月11日 22点07分
@啊o额iu鱼 。。。 早说嘛,不过我很少看这些文档的
2016年07月11日 23点07分
level 13
[勉强]感觉反正char类型把他做成8位2进制算的,管他是不是无符号(๑>؂<๑)。
2016年07月12日 02点07分 15
这个倒是真的(。・ω・。)
2016年07月12日 06点07分
1