首页 > 其他 > 详细

char,short,int,long,unsigned,signed

时间:2014-02-27 00:57:47      阅读:575      评论:0      收藏:0      [点我收藏+]
char, short, int, long, unsigned, signed。
6个关键字可以组合成8种整型类型。
signed char, signed short, signed int, signed long,
unsigned char, unsigned short, unsigned int, unsigned long。

一、如何使用char,short,int,long,unsigned,signed

1、signed和unsigned可以与char, short, int, long一起使用。
     char,short,int,long默认情况下是signed,带符号位的。

2、signed和unsigned也可以单独使用,这种情况下默认为int类型。

3、在XP 32位系统下,Microsoft Visual Stdio 2005 IDE下,各整型类型的长度是:
    sizeof(long) = 4;
    sizeof(int) = 4;
    sizeof(short) = 2;
    sizeof(char) = 1;

4、根据类型所占字节大小,可以分别求出某整型类型的范围。
     signed int  32bits(有符号位,二进制补码)
     故其范围是: [-2^(31), 2^(31) - 1]
     unsigned int 32bits(无符号位)
     范围是:[0, 2^(32) - 1]
     同理你可以递推出char,short,long的范围。

二、整型转换(1)

将整型类型中分成两组,一组是符号型,另一组是无符号。
bubuko.com,布布扣

1、 uy = ux
如果sizeof(ux) > sizeof(uy),则需要对ux的二进制补码进行左截取,再直接赋值。
如果sizeof(ux) = sizeof(uy),则直接赋值。
如果sizeof(ux) < sizeof(uy),则需要对ux的二进制补码进行左添加0,再直接赋值。

unsigned long ul = 0xFFFFFFF0;
unsigned int ui = 0xFFFFFFF0;
unsigned char uc = 0xF0;
unsigned short us;

us = ul;/*us = 0xFFF0 */
us = ui;/*us = 0xFFF0 */
us = uc;/*us = 0x00F0 */

2、uy = sx
如果sizeof(sx) > sizeof(uy), 则需要对sx的二进制补码进行左截取,再直接赋值。
如果sizeof(sx) = sizeof(uy), 则直接赋值。
如果sizeof(sx) < sizeof(uy), 则需要对sx的二进制补码进行左添加符号位,再直接赋值。

signed long sl = 0xFFFFFFF0;
signed int si = 0xFFFFFFF0;
signed short ss = 0xFFF0;
signed char sc = 0xF0;
unsigned short us;

us = sl; /*us = 0xFFF0*/
us = si; /*us = 0xFFF0*/
us = ss;/*us = 0xFFF0*/
us = sc;/*us = 0xFFF0*/

3、sy = ux
如果sizeof(ux) > sizeof(sy), 则需要对ux的二进制补码进行左截取,再直接赋值。
如果sizeof(ux) = sizeof(sy), 则直接赋值。
如果sizeof(ux) < sizeof(sy), 则需要对ux的二进制补码进行左添加0,再直接赋值。

unsigned long ul = 0xFFFFFFF0;
unsigned int ui = 0xFFFFFFF0;
unsigned short us = 0xFFF0;
unsigned char uc = 0xF0;
signed short ss;

ss = ul; /*ss = 0xFFF0 */
ss = ui; /*ss = 0xFFF0 */
ss = us;/*ss = 0xFFF0 */
ss = uc;/*ss = 0x00F0 */

4、sy = sx
如果sizeof(sx) > sizeof(sy), 则需要对sx的二进制补码进行左截取,再直接赋值。
如果sizeof(sx) = sizeof(sy), 则直接赋值。
如果sizeof(sx) < sizeof(sy), 则需要对sx的二进制补码进行左添加符号位,再直接赋值。

signed long sl = 0xFFFFFFF0;
signed int si = 0xFFFFFFF0;
signed char sc = 0xF0;
signed short ss;

ss = sl; /*ss = 0xFFF0 */
ss = si; /*ss = 0xFFF0*/
ss = sc;/*ss = 0xFFF0*/

二、整型转换(2)

执行赋值操作y_variable = x_variable
bubuko.com,布布扣

1、sizeof(x_variable) > sizeof(y_variable)
对x_variable的二进制补码进行左截取,然后直接赋值。
unsigned int ui = 0xFFFFFFF0;
signed int si = 0xFFFFFFFF0;
unsigned short us;
signed short ss;
us = ui; /*us = 0xFFF0*/
us = si; /*us = 0xFFF0*/
ss = ui; /*ss = 0xFFF0*/
ss = si; /*ss = 0xFFF0*/

2、sizeof(x_variable) = sizeof(y_variable)
直接赋值。
unsigned int ui = 0xFFFFFFF0;
signed int si;
si = ui; /*si = 0xFFFFFFF0*/

3、sizeof(x_variable) < sizeof(y_variable)
对x_variable的二进制补码进行左添加x_variable的符号位,然后直接赋值。
unsigned char uc = 0xF0;
signed char sc = 0xF0;
unsigned short us;
signed short ss;
us = uc;/*us = 0x00F0*/
us = sc;/*us = 0xFFF0*/
ss = uc;/*ss = 0x00F0*/
ss = sc;/*ss = 0xFFF0*/

三、算术类型转换
如果计算表达式中各个变量的类型不同,如何计算该表达式?
1、如果任何一个操作数为long double类型,则将另一个操作数转换为long double类型。
2、否则,如果任何一个操作数为double类型,则将另一个操作数转换为double类型。
3、否则,如果任何一个操作数为float类型,则将另一个操作数转换为float类型。
4、否则,如果任何一个操作数为unsigned long类型,则将另一个操作数转换为unsigned long。
5、否则,如果一个操作数为long类型且另一个操作数为unsigned int类型,则结果依赖于
long类型是否可以表示所有的unsigned int类型的值。如果可以,则将unsigned int 类型的操作数
转换为long类型;如果不可以,则将两个操作数都转换为unsigned long类型。
6、否则,如果一个操作数为long类型,则将另一个操作数转换为long类型。
7、否则,如果一个操作数为unsigned int 类型,则将另一个操作数转换为unsigned int类型。
8、否则,将两个操作数都转换为int类型。
注意1:在规则8中,将两个操作数都转换为int类型。如果操作数中有enum,char,short,则
一律将其转换为int类型,做整型运算。
注意2:在这里不包含强制类型转换。

本人现经营一个微信订阅号如下:欢迎大家关注,获取相关内容。
订阅号账号是:begginghard_zgh

订阅号名称是:读书笔记 By 张光辉

bubuko.com,布布扣

char,short,int,long,unsigned,signed,布布扣,bubuko.com

char,short,int,long,unsigned,signed

原文:http://blog.csdn.net/begginghard/article/details/19840961

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!