zoukankan      html  css  js  c++  java
  • C/C++(基础编码-补码详解)

    两个数的交换

    1.引入第三者。
    2.求和运算,求差。(这样会产生内存溢出)
    3.异或运算

        a = a^b;
        b = a^b;
        a = a^b;
    
        8b(bit位) = 1B(Byte=字节)//最小单位是字节
    

    32位机:2^32 = 4G寻址能力
    (王爽--统一编址,汇编语言)
    char类型一个字节,8位。[-128,127],2^8=256种,
    why?[-128,127];深层的编码采用补码,1,表示负数。
    正常的:

        0000 0000    1
        0000 0001    2
        0111 1111    127
    
        ...
        1000 0000    -0
        
        ...
        1111 1111    -127
    

    这样1+-1=-2;
    补码规则:

        0000 0000    0
        0000 0001    1
        0111 1111    127
    
        ...
        1000 0000    -128
                     -127   
        
        ...
        1111 1111    -1
    

    计算机只会做加法,1+-1=0;0000 0001 + 1111 1111= 0000 0000;高位溢出得0;

    #include<stdio.h>
    int main() {
        char a = 0;
        disBin(a);
        char b = 1;
        disBin(b);
        char c = 2;
        disBin(c);
        char d = 127;
        disBin(d);
        char e = -128;
        disBin(e);
        char f = -2;
        disBin(f);
        char g = -1;
        disBin(g);
    }
    
    //打印一个数的二进制
    void disBin(char ch) {
        int i = 8;
        while(i--) {
            if((1<<i) & ch) {
                printf("1");
            }else {
                printf("0");
            }
            if(i%4 == 0) {
                printf(" ");
            }
        }
        putchar(10);
    }
    

    补码的出现所有的乘法,除法,减法,都用减法实现。
    补码的规则:(运算互为逆运算)
    所有的整数的补码是他本身,所有的负数,取绝对值后取反,加一。
    逆过程的运算,最高位是1,是负数。全部参与运算取反加一。
    0的补码是0;
    补码的运算相当于12进制的时钟,其中顺时针为正,逆时针为负。例如:当前时钟在3点,要点到8点。可以顺时针一可以逆时针。3+5=8,(3+12)-7=8;中的12溢出,在这之中相加互为12的称之为“补数”。
    计算机中的所有减法,乘法,除法都可有加法计算。
    1-2=1+(-2),也就是相当于1加上-2的补码。
    注意:一个8位的空间,如果用来表示无符号数0-255(0-28-1),如果表示有符号的数:-128-127(-27-2^7-1)。

    sizeof();

    sizeof(char);//1字节
    sizeof(short);//2字节
    sizeof(int);//4字节
    sizeof(long);//4字节
    sizeof(long long);//8字节
    
    1字节 char
    0      - 255 unsigned char(无符号) 0     -2^8-1
    -128   - 127 signed char           -2^7  -2^7-1
    2字节 short
    0      - 65535    0       - 2^16-1
    -32768 - 32767    -2^15   - 2^15-1
    4字节 int
    0      - 2^32(40亿)
    -2^31  - 2^31-1
    long(4个字节)没有扩展,
    long long(8个字节)。
    0      - 2^64
    -2^62  - 2^63-1
    
    

    int 基本整型 理想的32位机,地址总线和数据总线都是32位的。

    有效数字,从左至右不为0的数字。超出类型的限制之后的数字不保证正确。
    float,doouble;

    数据类型图:

  • 相关阅读:
    matlab图像处理-中值滤波原理
    typora修改主题和字体
    [NLP] TextCNN模型原理和实现
    [python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写
    基于sklearn和keras的数据切分与交叉验证
    基于TextRank提取关键词、关键短语、摘要
    [强化学习]Part1:强化学习初印象
    Linux多文件按行拼接整合命令paste
    文本匹配算法
    Python如何输出带颜色的文字
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8169688.html
Copyright © 2011-2022 走看看