类型长度
基础知识
一字节8位 = 8bit
如32位机器,那么这32位就代表一个字
- 什么叫一个字
- 如:你输入的某个数字,如'1'就表示一个字,在机器中占有32位,这32位为4字节,这4个字节就表示一个字
- 但是不一定是8个字节表示一个字,要看为多少字节的机器,如果是64位机器,就是8字节表示一个字
- 总之就是在n位机器上n位就是一个字,\(\frac{n}{8}\)表示一个多少个字节
类型长度
这里用c语言为例:
类型 | 字节 | 具体范围 |
---|---|---|
char/signed char | 1 | -128 ~ 127 |
unsigned char | 1 | 0~255 |
short int / signed short int | 2 | -32768 ~ 32767 |
unsigned short | 2 | 0~65,535 |
int / signed int | 4 | -2,147,483,648~2,147,483,647 |
unsigned int | 4 | 0~4,294,967,295 |
long long int/long long | 8 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
float | 4 | \(-3.4\)x\(10^{38}\) ~ \(3.4\)x\(10^{38}\) |
double | 8 | \(-1.7\)x\(10^{308}\) ~ \(1.7\)x\(10^{308}\) |
long double | 8 | \(-1.7\)x\(10^{308}\) ~ \(1.7\)x\(10^{308}\) |
long int /long | 32位4字节 64 = 8 | -2,147,483,648~2,147,483,647 |
unsigned long | 32位4 64位8 | 0~4,294,967,295 |
指针 | 32位4 64位8字节 |
测试程序
#include <stdio.h>
#include <string>
int main() {
printf("%d", sizeof(int));//填入类型名字
return 0;
}
关于怎么算出的具体范围
下面用int举例
众所周知一个int4字节 那么就是占用32位 因为是signed int 默认有符号
所以一个符号位占领最高位 其实表示具体的数只有31位
每位可以表示0/1,那么可以表示\(2^{31}\)次 = 2147483648
因为正数中有全零的情况所以是2147483648 - 1
就只有 2147483647
所以就范围位-2147483648 ~ 2147483647
测试验证
#include<stdio.h>
int main() {
int a = 2147483648;//溢出导致最高位符号位为1变成负数
//2147483647 补码0111 1111 1111 1111 1111 1111 1111 1111
//1 补码0000 0000 0000 0000 0000 0000 0000 0001
//得到 补码 1000 0000 0000 0000 0000 0000 0000 0000 (10进制就是-2147483648)
printf("%d",a);
}
用心做~