c语言的带符号扩展和无符号扩展
来源:互联网 发布:激活windows 8.1专业版 编辑:程序博客网 时间:2024/04/30 14:50
始终记住两条:
1. 有符号的数据类型,在向高精度扩展时,总是带符号扩展
2. 无符号的数据类型,在向高精度扩展时,总是无符号扩展
char ca=128;unsigned char ucb=128;unsigned short usc=0;usc=ca + ucb; printf("%x",usc);usc=ca +(unsigned short)ucb; printf("%x",usc);usc=(unsignedchar)ca + ucb;printf("%x",usc);usc=ca+(char)ucb;printf("%x",usc);
那么上面的四种情况分别输出什么呢?
分析:
1)对于char类型,有符号,128已经溢出了,其二进制是 1000 0000,第一位会被当成符号位,
也是就是说此时它是负数了,它扩展成unsigned short时,带符号位扩展,符号位为1,所以在
前方补1,结果是 1111 1111 1000 000。 ucb类型为nsigned char,无符号,二进制是1000 0000,
扩展成unsigned shor,无符号扩展,所以补0,结果是0000 0000 1000 0000,。相加结果为
1 0000 0000 0000 0000 由于unsigned short是二字节,舍弃最前面的1,所以得到0x0,
2)情况和1一样,只是将ucb显示强制转换为unsigned short,所以得到0x0,
3)ca先强制转换为unsignedchar,仍然是1000 0000,注意此时转换后已经是一个无符号数,
所以再往unsigned short 扩展时,为无符号扩展,结果为0000 0000 1000 0000,ucb扩展后
也是0000 0000 1000 0000,相加结果为 0000 0001 0000 0000,所以结果为0x100
4)ca转为unsigned short,带符号扩展,为1111 1111 1000 000,ucb先强制转换为char,
然后再转为unsigned short,此时也要带符号扩展,所以也是1111 1111 1000 000,两数相加,
得到 1 1111 1111 0000 0000 ,所以结果为0xff00
- c语言的带符号扩展和无符号扩展
- c语言的带符号扩展和无符号扩展
- C语言中的无符号扩展和带符号扩展
- C语言中的无符号扩展和带符号扩展
- C语言中的无符号扩展和带符号扩展
- C语言中无符号扩展和带符号扩展知识讲解
- 符号扩展和无符号扩展
- C语言符号扩展
- C语言符号扩展
- C语言符号扩展
- C语言的有符号与无符号,二进制整数的扩展与截断
- C语言的位域和符号位扩展
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
- 符号性和符号扩展
- 符号扩展和截断
- 符号扩展
- 符号扩展
- 符号扩展
- hdu 蟠桃记
- Spring笔记之一Bean的标志符
- SlidingMenu属性详解
- 电脑误删文件恢复的方法
- 给自己的锐捷问题
- c语言的带符号扩展和无符号扩展
- matlab----image function
- 笔记6--TextView特效
- C++:存储类型
- PHP json_encode() 函数介绍以及使用
- 邀请柯南般的大孩子来深圳做智能手机专项测试
- Java工程师面试体验
- Android 4.4 Kitkat 对低内存设备的支持
- 如何用WinRAR制作安装包