1、有符號數轉換成無符號數
1.1 例一
?首先,我們需要清楚? C語言中負數是以補碼的形式進行存儲的。
示例:負數-1, (此處,假設是8位二進制表示)
對應正數的原碼:0000 0001;
取反: 1111 1110;
加1: 1111 1111;
最終,-1是以1111 1111的形式進行存儲的。及-1的無符號數對應的是255
?
1.2 例二
short int v = -12345;
unsigned short uv = (unsigned short)v;
printf("v = %d, uv = %u\n",v,uv);
在一臺采用補碼的機器來說,上述代碼會產生如下輸出:
v = -12345, uv = 53191
2、無符號數轉換成有符號數?
#include <stdio.h>
int main()
{short int v = -12345;unsigned short uv = (unsigned short)v;short int res=uv-65536;printf("v = %d, uv = %u res =%d \n",v,uv,res);return 0;
}
3、總結
有符號轉無符號,則有符號數? 加上(2^最大位數)
無符號轉有符號,則有符號數? 減去(2^最大位數)