LinuxC下signed和unsigned

little-endian小端模式的机子上测试

待装数据为int类型,发送和接收缓冲区的类型char或unsigned char  无影响

uchar 我自己缩写 unsigned char
发送方----------接收方
int------- uchar =====>uchar------int 
-----------|0xfcffffff-------| 0xfcffffff
|-4(10) --------------------------------| -4(10)
int------- uchar =====>char------int 
-----------|0xfcffffff-------| 0xfcffffff
|-4(10) --------------------------------| -4(10)

int------- char =====>uchar------int 
-----------|0xfcffffff------| 0xfcffffff
|-4(10) --------------------------------| -4(10)

int------- char =====>char--------int 
-----------|0xfcffffff------| 0xfcffffff
|-4(10) --------------------------------| -4(10)


----------------------------------------------------------


简单的说就是unsigned  int 和int  的转换是内存内容拷贝。我下面的例子在little-endian

#include<stdio.h>
int main()
{
 unsigned int a=6;
 int b=0xfffffffe;
 printf("%d",a+b);
 (a+b>6)?puts(">6"):puts("<=6");
return 0;
}
输出:4<6

上面样例

小端模式的机器里面

unsigned int 6存储 0x06 00 00 00[小端模式]

int  -2   存储(补码)0xfeffffff[小端模式]

a+b 提升为unsigned int  0x04000000[小端模式]  数值为4(10)

#include<stdio.h>
int main()
{
 unsigned int a=6;
 int b=-15;
 printf("%d",a+b);
 (a+b>6)?puts(">6"):puts("<=6");
return 0;

}
输出:-9>6

因为%d所以输出有符号的形式-9 原码09000008,反码f6ffffff,补码f7ffffff[小端模式],改成%u就会输出4294967287>6

#include<stdio.h>
int main()
{
 unsigned int a=6;
 int b=-15;
 printf("%u",a+b);
 (a+b>6)?puts(">6"):puts("<=6"); 
return 0;

}

上面样例

小端模式的机器里面

unsigned int 6存储 0x06 00 00 00[小端模式]

int  -15  存储(补码)0xf1ffffff[小端模式]

a+b 提升为unsigned int  0xf7ffffff[小端模式] 数值为4294967287(10)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值