C语言中无符号扩展和带符号扩展知识讲解
来源:互联网 发布:淘宝代运营哪家好 编辑:程序博客网 时间:2024/05/21 14:07
扩展的原则是:1.有符号的数据类型,在向高精度扩展时,总是带符号扩展
2.无符号的数据类型,在向高精度扩展时,总是无符号扩展
怎么理解呢?首先来看一道题目,按此题目讲解完你就明白了!
charca=128;
unsignedcharucb=128;
unsignedshortusc=0;
1)usc=ca+ucb;
printf("%x",usc);
2)usc=ca+(unsignedshort)ucb;
printf("%x",usc);
3)usc=(unsignedchar)ca+ucb;
printf("%x",usc);
4)usc=ca+(char)ucb;
printf("%x",usc);
问,在1、2、3、4这4种情况下分别输出什么?
分析:
1)对于char类型,有符号,128已经溢出了,其二进制是10000000,第一位会被当成符号位,也是就是说此时它是负数了,它扩展成unsignedshort时,带符号位扩展,符号位为1,所以在前方补1,结果是111111111000000.ucb类型为nsignedchar,无符号,二进制是10000000,扩展成unsignedshor,无符号扩展,所以补0,结果是0000000010000000,。相加结果为10000000000000000由于unsignedshort是二字节,舍弃最前面的1,所以得到0x0,
2)情况和1一样,只是将ucb显示强制转换为unsignedshort,所以得到0x0,
3)ca先强制转换为unsignedchar,仍然是10000000,注意此时转换后已经是一个无符号数,所以再往unsignedshort扩展时,为无符号扩展,结果为0000000010000000,ucb扩展后
也是0000000010000000,相加结果为0000000100000000,所以结果为0x100
4)ca转为unsignedshort,带符号扩展,为111111111000000,ucb先强制转换为char,然后再转为unsignedshort,此时也要带符号扩展,所以也是111111111000000,两数相加,得到11111111100000000,所以结果为0xff00
- C语言中无符号扩展和带符号扩展知识讲解
- C语言中的无符号扩展和带符号扩展
- C语言中的无符号扩展和带符号扩展
- c语言的带符号扩展和无符号扩展
- c语言的带符号扩展和无符号扩展
- C语言中的无符号扩展和带符号扩展
- 符号扩展和无符号扩展
- C语言符号扩展
- C语言符号扩展
- C语言符号扩展
- c中符号位扩展
- C语言的有符号与无符号,二进制整数的扩展与截断
- C语言的位域和符号位扩展
- 符号性和符号扩展
- c语言中无符号数转换为带符号数
- 符号扩展和截断
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
- 符号扩展
- vs2010+matlab R2013a+win7 32bit 混合编程
- java 多线程之join
- 程序员必读经典书籍
- 1011. A+B和C (15)
- 【Boost】boost::noncopyable介绍
- C语言中无符号扩展和带符号扩展知识讲解
- DELPHI分别连接MS SQLSERVER、Oracle和ACCESS数据库的连接字符串(备用)
- 070001 KANO模型
- 第二批要买的书
- Myeclipse更改jsp默认编码
- Android平台下的一些常用知识
- python安装setuptools(easy_install工具)
- Flex 验证邮箱地址
- 浅谈函数重载和模板函数