类型长度

基础知识

一字节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);
}

posted @ 2023-04-03 20:12  壹剑霜寒十四州  阅读(22)  评论(0编辑  收藏  举报