一个字节就是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 |