LinuxC下signed和unsigned
2016-12-13 16:58
417 查看
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
上面样例
小端模式的机器里面
unsigned int 6存储 0x06 00 00 00[小端模式]
int -2 存储(补码)0xfeffffff[小端模式]
a+b 提升为unsigned int 0x04000000[小端模式] 数值为4(10)
因为%d所以输出有符号的形式-9 原码09000008,反码f6ffffff,补码f7ffffff[小端模式],改成%u就会输出4294967287>6
上面样例
小端模式的机器里面
unsigned int 6存储 0x06 00 00 00[小端模式]
int -15 存储(补码)0xf1ffffff[小端模式]
a+b 提升为unsigned int 0xf7ffffff[小端模式] 数值为4294967287(10)
待装数据为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)
相关文章推荐
- unsigned vs. signed in C/C++
- 请编写一个c程序确定signed,unsigned的char,short,int和long变量取值范围
- Unsigned or Signed
- signed和unsigned之间
- unsigned 与signed
- char,short,int,long,unsigned,signed
- 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现
- the apk for your currently selected variant(app-release-unsigned.apk)is not signed.Please specity a
- C/C++之char,short ,long,double,float,int, signed, unsigned
- signed和unsigned
- signed and unsigned of verilog
- c++基础类型之signed、unsigned的一个细节
- C语言 unsigned与signed区别
- [转] Unsigned VS signed
- 11.读c语言深度剖析 -- auto register static sizeof signed、unsigned
- (原创)HDL中的unsigned与signed
- signed和unsigned之间
- 语言 unsigned 和 signed 类型相互转换深入理解
- 不带signed或unsigned关键字的char…
- MySQL unsigned默认显示字符宽度比signed少一个