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

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/2772af454f.html