int,signed int和unsigned int 以及printf 的%u,%d的区别

原创 2016年05月31日 09:20:04
###############首先###############
signed int 有符号整型
unsigned int 无符号整型
int就是signed int,书上写是用[signed] int表示signed可以省略

2^31=2147483648
2^31-1=2147483647
2^32=4294967296
2^32-1=4294967295

###############对有符号整型###############
范围从-2147483648到-1=2^31个=2147483648个
对二进制用补码表示,最高位1开头:
1000 0000 0000 0000 0000 0000 0000 0000 -> -2147483648
1000 0000 0000 0000 0000 0000 0000 0001 -> -2147483647
...
1111 1111 1111 1111 1111 1111 1111 1110 -> -2
1111 1111 1111 1111 1111 1111 1111 1111 -> -1

范围从0到2147483647 =2^31个=2147483648个
对二进制用补码(正数原码反码补码一样)表示,最高位0开头:
0000 0000 0000 0000 0000 0000 0000 0000 -> 0
0000 0000 0000 0000 0000 0000 0000 0001 -> 1
...
0111 1111 1111 1111 1111 1111 1111 1110 -> 2147483646
0111 1111 1111 1111 1111 1111 1111 1111 -> 2147483647

###############对无符号整型###############
无符号就是最高位不表示符号位,依然作为数值位使用
范围从0到4294967295=2^32个=4294967296个

###############关于printf的打印###############
%d有符号
%u无符号

signed int i = -3;    //即i=‭11111111111111111111111111111101‬(有符号数-3)
unsigned int i2 = -13;//即i=‭11111111111111111111111111110011‬‬(有符号数-13)
(1)
printf("i的值为%d\n", i);//把i解析为有符号整型,  输出: i的值为-3
printf("i2的值为%d\n", i2);//把i解析为有符号整型,输出:i2的值为-13
(2)
printf("i的值为%u\n", i);//把i解析为有符号整型, 输出: i的值为4294967293 (即=4294967295-2)
printf("i2的值为%u\n", i2);//把i解析为有符号整型, 输出:i2的值为4294967283 (即=4294967295-12)

对于(1)是有符号原样解析,最高位为符号位
对于(2)是无符号解析,最高位被当作了数值位


版权声明:本文为博主原创文章,未经博主允许不得转载。

都是类型惹的祸——小心unsigned

正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等。大家有没想...
  • ljianhui
  • ljianhui
  • 2013年08月27日 00:39
  • 28924

unsigned int 类型使用谨记

转载来源:http://blog.csdn.net/ljianhui/article/details/10367703 尽量避免有符号数与无符号数的比较运算和避免减法运算,在很多时候...
  • kkkkkkkooooooo111
  • kkkkkkkooooooo111
  • 2016年12月16日 22:24
  • 2179

【杂谈】 论 int 和 unsigned int 导致的问题

问题描述:   某现场出问题了,说我们的程序挂掉了,给我发了老长的 core文件,这尼玛。。。当我 在调试这个core的时候, 顺着调用函数栈 查找,一下子就注意到了一个 特别不寻常的数字  没错,他...
  • vevenlcf
  • vevenlcf
  • 2015年08月28日 15:02
  • 969

c语言中unsigned int和int的区别

void foo(void) {   unsigned int a = 6;   int b = -20;   (a+b > 6) ? puts("> 6") : puts(" }...
  • innerpease
  • innerpease
  • 2012年09月11日 09:31
  • 6955

unsigned int与int相加的问题

以前还真没在上面较过真,结果今天就被鄙视了,特地记下来。先看程序: int main() { int a = -6; unsigned int b = 4; if(a+b > 0) pri...
  • thefutureisour
  • thefutureisour
  • 2012年11月05日 08:19
  • 10167

在C语言中,double、long、unsigned、int、char类型数据所占字节数

和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)...
  • lyl0625
  • lyl0625
  • 2012年03月13日 18:24
  • 212247

C++中虚析构函数的作用

    我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:        有下面的两个类:class ClxBase{public:...
  • starlee
  • starlee
  • 2006年03月09日 15:34
  • 152884

C++中的(unsigned int)&代表的意思

int &m = i
  • hbuxiaofei
  • hbuxiaofei
  • 2014年07月01日 20:21
  • 2289

char 和 unsigned 与int 之间的转换

char 和 unsigned 与int 之间的转换,并通过char 和 unsigned 转换成 int 的不同之处,思考char 与 unsigned char 的区别...
  • yifeiboss
  • yifeiboss
  • 2016年08月14日 21:20
  • 4603

int、long、long long在printf中的格式

在printf中%d用于int或者比int小的整数类型。比int小的类型被转型成int。 %ld用于long类型,%lld用于long long类型。 %x标识的数会被当成int进行读取,所以lo...
  • fz_ywj
  • fz_ywj
  • 2012年10月24日 16:11
  • 46852
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:int,signed int和unsigned int 以及printf 的%u,%d的区别
举报原因:
原因补充:

(最多只允许输入30个字)