有符号和夫符号的取值范围、数值溢出

1)有符号字符型:(signed char)8bit数据存储区间为-2^7——2^7-1;-128——127

8bit数据最大存储值/一定是正数

原/反/补码:0 111 1111=1000 0000-1=2^7-1=127//最大值

8bit数据最小存储值

原码:1111 1111=-127

反码:1000 0000

补码:1000 0001//表示存-127的值;然而并不是最小值,将它再-1

补码:1000 0000  -0=-128//计算机中只保留0的值;-0的位置给了-128

-128原码:1000 0000//-128原码和补码是一致的,但本身并不是一个值

数据存储时,将-0对应的区间值设为最小值-2^7

整型:(signed int)32bit数据存储区间-2^31——2^31-1;-2,147,483,648——2,147,483,647

最大值:0111 1111 1111 1111 1111 1111 1111 1111

最小值:1000 0000 0000 0000 0000 0000 0000 0000

长长整型:(signed long long)64bit数据存储区间为-2^63——2^63-1

2)无符号:无符号数最高位不是符号位,而是数的一部分,无符号数不可能是负数

unsigned char数据存储区间为0——255

最大值:1111 1111  2^8-1

最小值:0000 0000  0

Unsigned int数据存储区间为0——4,294,967,295

最大值:1111 1111 1111 1111 1111 1111 1111 1111  2^32-1= 4,294,967,295

最小值:0000 0000 0000 0000 0000 0000 0000 0000  0

数据类型

占用空间

取值范围

short

2字节

-32768到32767;-2^15——2^15-1

int

4字节

-2147483648到2147483647;-2^31——2^31-1

long

4字节

-2147483648到2147483647;-2^31——2^31-1

long long

8字节

-2^63——2^63-1

unsigned short

2字节

0到65535;0——2^16-1

unsigned int

4字节

0到4294967295;0——2^32-1

unsigned long

4字节

0到4294967295;0——2^32-1

unsigned long long

8字节

0——2^64-1

数值溢出:当超过一个数据类型能够存放最大的范围时,数值会溢出

有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。

char ch=127

ch=ch+2

127原码:0111 1111            127反码:0111 1111            127补码:0111 1111

2原码:0000 0010              2反码:0000 0010          2补码:0000 0010

                                                                                                       ch+2补码=1000 0001       

                                                                                                       ch+2反码=1000 0000

                                                                                                       ch+2原码=1111 1111

                                                                                                       ch+2=-127

eg1:short a=0x7fff+2

7fff原码:0111 1111 1111 1111

7fff反码:0111 1111 1111 1111

7fff补码:0111 1111 1111 1111

2原码:0000 0000 0000 0010

2反码:0000 0000 0000 0010

2补码:0000 0000 0000 0010

7fff补码:0111 1111 1111 1111

2补码:0000 0000 0000 0010

7fff+2补码=1000 0000 0000 0001

7fff+2反码=1000 0000 0000 0000

7fff+2原码=1111 1111 1111 1111

Eg2.unsigned short=oxffff+5

ffff原码:1111 1111 1111 1111

ffff反码:1111 1111 1111 1111

ffff补码:1111 1111 1111 1111

   5原码:0000 0000 0000 0101

   5反码:0000 0000 0000 0101

   5补码:0000 0000 0000 0101

 ffff补码:1111 1111 1111 1111

5补码:0000 0000 0000 0101

 ffff+5补码=1000 0000 0000 0100

原文地址:https://www.cnblogs.com/wanghong19991213/p/13438855.html