而且,测试中发现,如果是short、int类型就没有问题,只是unsigned short , unsigned int有问题
查阅资料也没有非常清晰的说明。
我觉得应该算是C的一个BUG。再等高人吧,看看有没有更清楚的大师。
这和linux环境无关了,windows下也是这样的。虽然8为的char可以表示256个字符,不过明显系统是用有符号数表示它的。超过127的数计算机就理解成负数了。200应该是表示为 -73
然后就是强制转换的问题了,系统先把-73按照补码的格式扩展到4个字节的int型,补码就是"111111111111111111111111101100101",后面几个01是我乱打的,懒得算了....然后用unsigned表示就是4294967240了。
至于LZ文为什么强制转化的unsigned int类型就按int类型来处理了,我只能说编译器就是这么做了,编程的时候还是得小心点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)