避免用char类型作为数组小标
2015-11-02 21:17
513 查看
在统计字符串的时候常用数组来统计,字符为数组下标,如求字符串中第一个不重复(只出现过一次)的字符
但是字符的类型是char类型可能为负数,不能做下标。
不能把char强转成 unsigned int 做下标,因为类型提升的时候,是按照高位填充的多余字节,如果char本身为负数,第8位就是1,转成 unsigned int 或者int时多出来的三个字节都是填充1;如果是0,则都填充0
如 char c=-128 ,内存中二进制位 10000000 ,十六进制为 0x80
无是提升为unsigned int 还是 int ,其内存都是 11111111 11111111 11111111 10000000 即0xffffff80
结果:
4294967168
4294967168
-128
4294967168
4294967168
-128
-128
4294967168
-128
正确做法:
将 char 转成unsigned char 做下标
但是字符的类型是char类型可能为负数,不能做下标。
不能把char强转成 unsigned int 做下标,因为类型提升的时候,是按照高位填充的多余字节,如果char本身为负数,第8位就是1,转成 unsigned int 或者int时多出来的三个字节都是填充1;如果是0,则都填充0
如 char c=-128 ,内存中二进制位 10000000 ,十六进制为 0x80
无是提升为unsigned int 还是 int ,其内存都是 11111111 11111111 11111111 10000000 即0xffffff80
int main() { char c = -128; unsigned int uint = c; cout << uint << endl; printf("%u\n", uint); printf("%d\n", uint); uint = (unsigned int)c; cout << uint << endl; printf("%u\n", uint); printf("%d\n", uint); int tint = c; cout << tint << endl; printf("%u\n", tint); printf("%d\n", tint); }
结果:
4294967168
4294967168
-128
4294967168
4294967168
-128
-128
4294967168
-128
正确做法:
将 char 转成unsigned char 做下标
相关文章推荐
- Objective-C:copy的用法解释
- iOS动画 UIView动画
- 基于MeanShift的视频目标跟踪算法及代码实现
- PowerShell 在hyper-v中创建虚拟机
- Dell笔记本安装win10无法调出cmd
- ADB server didn't ACK fail to start daemon解决方案
- ACE中同步线程方法
- malloc、calloc、realloc的区别
- Linux 的文件权限与目录配置
- Lesson 9 Array multiplication
- Linux常用命令总结及常用快捷键
- python爬虫入门
- 编译原理(词法分析)
- Fragment基础点滴学习---动态加载加载
- 正则化方法:L1和L2 regularization、数据集扩增、dropout
- 数据库三范式
- (OC)基础第二讲:实例变量可见度、方法
- 关于“32位系统支持4g内存的访问”的理解
- Modern OpenGL ES: ndk编程——画一个三角形之Shader工程
- 逻辑斯蒂回归 Logstic Regression in Python