20080923
来源:互联网 发布:淘宝课程学习 编辑:程序博客网 时间:2024/05/16 10:55
1. 整数的扩展
当我们需要将一个较小的数据类型转换成一个较大的数据类型时,对于无符号数而言,我们只需要简单的进行零扩展(zero extension)就可,即只需要将要扩展的位填0就好了;而对于有符号数而言,我们就必须进行符号扩展了(sign extension)了,即将需要扩展的位全部填为当前的符号位。
eg. unsigned: [ x1 x2 x3 ... xn ] -> [ 0 0 0 ... 0 0 ... x1 x2 x3 ... xn ]
signed: [ x1 x2 x3 ... xn ] -> [ x1 x1 x1 ... x1 ... x1 x2 x3 ... xn ]
至于有符号数的扩展的证明,可参见二进制的表示方式和数学归纳法。
因此,我们要格外小心这些整数扩展而产生的问题,例如:
eg1.
- short sx = val; /* -12345 --- 0xCFC7 */
- unsigned short usx = sx; /* 53191 --- 0xCFC7 */
- int x = sx; /* -12345 --- 0xFFFFCFC7 */
- unsigned ux = usx; /* 53191 --- 0x0000CFC7 */
- unsigned uy = x; /* 4294954951 --- 0xFFFFCFC7 */
eg2.
- /* WARNING: This is buggy code */
- float sum_elements( float a[], unsigned length )
- {
- int i;
- float result = 0;
- for ( i = 0; i <= length - 1; i++ ) // error: 0U - 1 = max(32bit)
- result += a[i];
- return result;
- }
P54
- 20080923
- 20080923
- C指针深入
- 9月23号-自动装箱拆箱
- 男人要象狗 女人要象猫
- 这个C++程序 输入一组数据 为何会输出很多个结果啊~ 是有关文件处理的
- linux 和 window互访(samba)
- 20080923
- Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).错误的解决办法
- Linux菜鸟必知必会的命令集合
- 明晰C++内存分配的五种方法的区别
- 最近给办公室写的一个网页元素获取函数,支持utf8
- 简单使用MSXML生成xml文件
- C#面向对象设计模式纵横谈 学习笔记18 Iterator迭代器模式(行为型模式)
- 睡觉啦!
- 在.NET程序中正确使用String类型