Long, int, uint, char 等整型总结

一个字节就是8byte, 也就是2^8

一个字就是4Byte,也就是2^4

---------------------------------------------------------------------------------------------------------------------------------

不同类型的取值范围

int8:   -128 ~ 127
int16:  -32768 ~ 32767
int32:  -2147483648 ~ 2147483647
int64:  -9223372036854775808 ~ 9223372036854775807
 
uint8:  0 ~ 255
uint16: 0 ~ 65535
uint32: 0 ~ 4294967295
uint64: 0 ~ 18446744073709551615

---------------------------------------------------------------------------------------------------------------------------------

1TB = 1024GB
1GB = 1024MB
1MB = 1024KB
1KB = 1024Byte
1Byte = 8Bit

Byte 又称为 字节,Bit 又称为 位,Bit 是内存中最小的单位

---------------------------------------------------------------------------------------------------------------------------------

int8 / uint8:占8Bit = 占1Byte = 在内存中二进制表现形式为:00000000 00000000
 
int16 / uint16:占16Bit = 占2Byte = 在内存中二进制表现形式为:00000000 00000000 00000000 00000000
 
int32 / uint32:占32Bit = 占4Byte = 在内存中二进制表现形式为:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 
int64 / uint64:占64Bit = 占8Byte = 在内存中二进制表现形式为:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

---------------------------------------------------------------------------------------------------------------------------------

int / uint 类型 的取值范围详解(二进制到十进制),以 int8 / uint8 为例:
int8占1个字节,1字节(byte)占8位(bit)
 
其中最高位代表符号位 1-负号;0-正号
 
那么最大数值(127)的二进制为:
0 1 1 1 1 1 1 1

换算成10进制为 从低位到高位开始计算:
 
0        1        1        1        1        1        1        1
0*2^7    +1*2^6   +1*2^5   +1*2^4   +1*2^3   +1*2^2   +1*02^1   +1*2^0
0        +64       +32     +16      +8       +4       +2       +1
=127
那么最小数值(-128)的二进制为:
1 0 0 0 0 0 0 0 

-128的原码二进制为:
表达:10000000
反码:01111111
补码:01111111  +  00000001
原码:10000000
换算成10进制为 从低位到高位开始计算:
 
1        0        0        0        0        0        0        0
1*2^7    +0*2^6   +0*2^5   +0*2^4   +0*2^3   +0*2^2   +0*02^1  +0*2^0
128      +0       +0       +0       +0       +0       +0       +0
= 128 * -1
= -128
更好理解的解释:
1.int8占1个字节(Byte) 也就是8个二进制位(Bit)
2.每个二进制位 可以存储0 和 1 两个数 ,8个二进制位就有2^8 = 256种组合(可以存储256个数)
3.int8为有符号,所以正数和负数将平分256个数。256 / 2 = 128
4.负数为128个数 最小值为-128 
5.正数为128个数,0占一个数 最大值为+127
 
如果是uint8(8Bit无符号-没有负数) 2^8 = 256
0 占一个数 ,所以最大是255

其他位int / uint计算方法与int8 / uint8相同
---------------------------------------------------------------------------------------------------------------------------------

Long

---------------------------------------------------------------------------------------------------------------------------------

1. long 是C语言的一个关键字,代表一种数据类型,中文为长整型。

2. long是long int的简写,也就是说,在C语言中long int类型和long类型是相同的。

3. 每个long型占4个字节,在32位编译系统下,long和int占的空间是相同的。这也导致了long型变量使用的越来越少了。

4. long型可以表示的整型数字范围为-2,147,483,648 ~ 2,147,483,647, 即-2^32 ~ 2^32-1。

在用在C的格式化输入输出时,long型的格式化字符为"%ld"。

5. long同其它整型类型一样,可以同unsigned 联合使用,形成unsigned long,即无符号长整型, 其格式化字符为"%lu"。

6. 在部分编译器下,比如gcc, 两个long合用,即long long类型,表示C语言目前最长的系统整型类型,每个long long类型占8字节,64位。其格式化字符为"%lld"

---------------------------------------------------------------------------------------------------------------------------------

Int

---------------------------------------------------------------------------------------------------------------------------------

int数据类型在内存中占用了4个字节byte(4*8个bit比特)就是32个比特位。第一位代表int的正负,后31位存储数据。当int取最大值时相当于31个1(1*2^30+1*2^29+1*2^28+....+1*2^0)可以转化为有32位切为1其他为0之后再减去1(1*2^31-1)。换算一下大概是21亿多。
 

-------------------------------------------------------------------------------------------------------------------

char

-------------------------------------------------------------------------------------------------------------------

1.取值范围相同
字符分类两类,一种是无符号字符 unsignedchar,一种是有符号的字符 char ,他们取值范围不同:

无符号字符unsigned char取值范围:0~255
有符号字符char取值范围:-128~127

2.字符串由多个字符构成
字符串和字符都可以使用 char 表示,注意使用的区别:

//字符串
char* p = "123"; //字符串使用双引号
//字符
char  p = '1';//字符使用单引号
char  p = '2';//字符使用单引号
char  p = '3';//字符使用单引号

3.字符串和字符使用 printf 函数
字符串和字符需要使用不同的占位符:字符串使用 %s 作为占位符,字符使用 %c 作为占位符;

printf("%c ", 'A');
printf("%s ", "A");

---------------------------------------------------------------------------------------------------------------------------------

不同平台整型字节长度区别

平台/类型 char short int long long long
16位 1 2 2 4 8
32位 1 2 4 4 8
64位 1 2 4 8 8

猜你喜欢

转载自blog.csdn.net/cyy1104/article/details/130727266
今日推荐