zoukankan      html  css  js  c++  java
  • 数据类型和sizeof

    类型

    整数
    char short int long long long

    浮点数
    float double long double

    逻辑
    bool

    指针

    自定义类型

    类型区别

    名称: int long double
    输入输出的格式化:%d ,%ld, %lf (入) %f(出)
    所表达的数的范围:char < short < int < float < double
    内存中所占据的大小:1字节到16字节
    内存中的表达形式: 二进制数(补码)【整型】 编码【浮点数】

    C是有类型的语言

    有检查,但不严格
    类型安全
    面向底层强调类型,离底层越远,越强调逻辑

    整数类型

    char 1字节(8比特)
    short 2字节
    int,long取决于编译器(32),通常的意义是1个字
    long long 8字节

    字长

    • int 就是用来表示寄存器的
    • 寄存器是多宽的,几个bit,一个寄存器的大小。一次可以传递和处理
    • {CPU(Reg寄存器)}=总线={RAM 内存}

    整数的内部表达

    以什么方式看待
    eg:18的表示 用不同的进制表达

    一个字节可以表达的数:00000000 —— 11111111(八位) 即0——255
    三种方案

    1. 仿照十进制 有一个特殊的标志表示负数
    2. 取中间的数为0.类似数轴
    3. 补码

    计算机内部一切都是二进制
    十进制(在运算结果上处理) 八进制 十六进制 二进制
    前两种存在问题,故选择第三种方案

    补码

    考虑-1.-1+1=0.
    如何用二进制表示
    0——>0000 0000
    1——>1111 1111
    1111 1111 + 0000 0001 = 1 0000 0000
    因为0-1=-1,所以,-1=
    (1)0000 0000 - 0000 0001 ——>1111 1111
    1 1111 1111 被当作二进制看待时,是255,被当作补码看待时,是-1
    同理,对于-a,其补码就是0-a,实际是2的n次方-a,n是这种类型的位数。
    补码の意义就是 拿补码和原码可以加出一个溢出的0

    数的范围

    对于一个字节(8位)可以表达的是
    0000 0000 —— 1111 1111
    其中
    0000 0000 ——>0
    1111 1111~ 1 0000 0000 ——>-1~-128
    0000 0001~ 0111 1111 ——>1~127

    计算不同类型所能表达的整数范围(-2的n-1次方~2的n-1次方-1)

    unsigned 不以补码的形式来表示负数,不把高位为1的舍去

    使得数据表达范围在正数范围扩大一倍,负数无法表达
    如果一个字面量常数想要表达自己是unsigned,可以在后面加u或者U
    eg:255U
    unsigned 的初衷并非为了扩充数能表达的范围,而是为了做纯二进制运算,主要是为了移位

    eg: int 的最大数是多少? (利用⚪)

    整数的输入输出

    只有两种形式:int 或long long
    %d:int
    %u:unsigned
    %ld: long long
    %lu:unsigned long long

    取决于正确的方式看待 格式化

    8进制和16 进制

    • 一个以0开始的数字字面量是8进制

    • 一个以0x开始的数字字面量是16进制

    • %o用于8进制 %x用于16进制

    • 吧、8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关

    • 16进制很适合表达2进制数据,因为4为将进制正好是一个16进制位

    • 8进制的一位数字正好表示3位二进制

    • 因为早期 计算机的字长是12的倍数,而非8

    选择整数类型

    为什么整数要有那么多种?
    为了准确表达内存,做底层程序的需要
    没有什么特殊需要就选择int
    现在的CPU的字长普遍是32位或64位,一次内存读写就是一个int,一次计算也是一个int,选择更短的类型不会更快,甚至可能更慢
    现在的编译器一般也会涉及内存条对齐,所以更短的类型实际在内存中也可能占据一个int的大小(虽然sizeof告诉你更小)
    unsigned与否只是输出的不同,内部计算是一样的,

    浮点类型

    类型 字长 范围 有效数字
    float 32 0,±inf,fan 7
    double 64 -0,±inf,fan 15
    keep it up
  • 相关阅读:
    4. Median of Two Sorted Arrays
    680. Valid Palindrome II
    11. Container With Most Water
    10. Regular Expression Matching
    1_Utilities__deviceQuery + 1_Utilities__deviceQueryDrv + 1_Utilities__topologyQuery
    1_Utilities__bandwidthTest
    CUDA C Programming Guide 在线教程学习笔记 Part 11
    hdu 3790 最短路径问题
    hdu 1050 Moving Tables
    斯特林公式 hdu1018
  • 原文地址:https://www.cnblogs.com/Z1188G/p/13733306.html
Copyright © 2011-2022 走看看