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