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
1
2
3
4
5
6
7
8
9#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; }
上面样例
小端模式的机器里面
unsigned int 6存储 0x06 00 00 00[小端模式]
int -2 存储(补码)0xfeffffff[小端模式]
a+b 提升为unsigned int 0x04000000[小端模式] 数值为4(10)
1
2
3
4
5
6
7
8
9
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; }
因为%d所以输出有符号的形式-9 原码09000008,反码f6ffffff,补码f7ffffff[小端模式],改成%u就会输出4294967287>6
1
2
3
4
5
6
7
8
9
10#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)
最后
以上就是重要高山最近收集整理的关于LinuxC下signed和unsigned的全部内容,更多相关LinuxC下signed和unsigned内容请搜索靠谱客的其他文章。
发表评论 取消回复