char 和 unsigned 与int 之间的转换
来源:互联网 发布:软件著作权登记查询 编辑:程序博客网 时间:2024/05/23 19:18
预备知识:整数在计算机中的表示
整数在计算机中是以二进制补码的方式表示的,以int型为例:
int有4个字节,最高位为符号位,即正数为0xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx b ,例如:
在计算机里存储为0000 0000 0000 0000 0000 0000 0000 0011b;
负数为1xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx b,即将该负数的绝对值按位取反,然后加1,例如:
在计算机里存储为1111 1111 1111 1111 1111 1111 1111 1101b;
在计算机里存储为1111 1111 1111 1111 1111 1111 1111 1101b;
int型转换为char和unsigned char
因为char 和unsigned char型都是一个字节,int型是四个字节的,从int 型到char 或 unsigned char型的转换都是直接将int的最低字节赋予char 或 unsigned char;例如:
0000 0000 0000 0000 0000 0000 0000 0011b;所以 c 和 uc 在计算机里的存储都为 0000 0011b,由于是正数,故值都为3;
3是int型,其在计算机里的存储为有例如:
1111 1111 1111 1111 1111 1111 1111 1101b;所以c和uc在计算机里的存储都为1111 1101b;但由于char是有符号的,unsigned char 是无符号的;char c的最高位为符号位,符号位1表示负数,0表示正数,所以c的值为-3;而unsigned char uc是无符号的,所以值为253;
-3是int 型,其在计算机里的存储为char和unsigned char 转换为int 型
由于char或者unsigned char是一个字节的,int型是四个字节的,当char 或者 unsigned char向int 型转换的时候,高的三个字节计算机怎么处理呢?
1、因为char是有符号的,所以int 的高三个字节都是以char的最高位(符号位去填充),例如:
当c是char型,并且在计算机里存储为1111 1101b时, n在计算机里的存储为:1111 1111 1111 1111 1111 1111 1111 1101b,又例如:
当c是char型,并且在计算机里存储为0000 0011b时,
n在计算机里的存储为:0000 0000 0000 0000 0000 0000 0000 0011b;
2、因为unsigned char 是无符号的,所以int 的高三个字节都是以0填充,例如:
当uc是unsigned char型,并且在计算机里存储为1111 1101b时, n在计算机里的存储为:0000 0000 0000 0000 0000 0000 1111 1101b,又例如:
当uc是unsigned char型,并且在计算机里存储为0000 0011b时,
n在计算机里的存储为:0000 0000 0000 0000 0000 0000 0000 0011b;
原文链接:http://blog.csdn.net/yifeiboss/article/details/52206072
阅读全文
0 0
- char 和 unsigned 与int 之间的转换
- char 和 unsigned 与int 之间的转换
- C语言unsigned char、char与int之间的转换
- string与int和char之间的类型转换问题
- unsigned char类型指针与int型数据的转换
- int与char之间的转换关系
- int 与char数组之间的转换
- char 与 int之间的转换
- qt下unsigned char *与QString之间的相互转换
- char,unsigned char,unsigned short,有符号和无符号之间的转换
- 补码和数的转换(unsigned/char|int)
- 关于unsigned short,char,unsigned int 之间的赋值
- int 与 unsigned int、unsigned char 的计算
- unsigned int 与 字符串 之间相互转换
- CString与int、char*、char[100]之间的转换
- 转贴 CString与int、char*、char[100]之间的转换
- CString与int、char*、char[100]之间的转换
- CString与int、char*、char[100]之间的转换
- springboot 启动初始化数据
- 利用js排序html表格
- Codeforces 260 Recordings
- poj-2689-大区间求素数
- 随笔记:使用Zxing 生成二维码
- char 和 unsigned 与int 之间的转换
- JDK版本新特性介绍&JDK1.7
- 机器人工具箱的安装
- IDEA下搜狗输入法输入中文时卡着不动的参考解决方法
- javascript中的break和continue用法
- 异常讲解不错的博客
- 自定义 viewpager, 实现竖直viewpager效果
- oracle 11g下exp direct=y的陷阱
- Arrays.sort()排序报空指针错误