C语言中的有符号数和无符号整形数转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C 语⾔中的有符号数和⽆符号整形数转换
1.有符号数和⽆符号数的转换
观察结果,发现,确实是内存中的补码存储未曾改变,仅仅是解释带符号数和⽆符号数的⽅式改变了,(补码解释)C 语⾔允许不同数据类型之间进⾏强制类型转换,同时描述⼀个原理: 1.计算机中数据的存储⼀般都是补码,
2.计算机在强制类型转换的结果是保持位值不变(内存中存储的补码不改变),仅仅改变了数据的解释⽅式
3.有符号数转换成⽆符号数
1.判断有符号数最⾼位是否为1,如果有符号数最⾼位为1,则把有符号数解释为补码(求真值:符号位不变,数值位取反,末位+1)
2.如果有符号数最⾼位为0,则直接把有符号数解释为⽆符号数
4.⽆符号数转换成有符号数
1.判断⽆符号数最⾼位是否为1,如果⽆符号数最⾼位为1,则把⽆符号数解释为补码(求真值:符号位不变,数值位取反,末位+1)
2.如果⽆符号数最⾼位为0,则直接把⽆符号数解释为⽆符号数
请观察如下代码:
#include "link_node.h"
#include <bitset>
using namespace std;
int main()
{
//有符号数向⽆符号数转换,存储不变,仅仅解释⽅式改变
short x = 12; //带符号短整形 2B 表⽰数据范围:-32768~32767
unsigned short y = (unsigned short)x; //⽆符号短整形2B 表⽰数据范围:0~65535
cout <<bitset<16>(x)<<endl;
cout <<bitset<16>(x)<<endl;
cout <<x <<endl;
cout <<y <<endl;
//⽆符号数向有符号数转换
unsigned a = 65535;
short b = (short)a;
cout <<bitset<16>(a)<<endl;
cout <<bitset<16>(b)<<endl;
cout <<a <<endl;
cout <<b <<endl;
return 0;
}。

相关文档
最新文档