C/C++(基础编码-补码详解)

摘要:
[-128,127]; 深度编码采用补码1,表示负数。0的补码为0;补码操作相当于12基时钟,其中顺时针为正,逆时针为负。3+5=8,-7=8; 12 in的溢出称为“补码”。1-2=1+(-2),它是1加-2的补码。有效数字,从左到右不是0。

两个数的交换

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;

数据类型图:

C/C++(基础编码-补码详解)第1张

免责声明:文章转载自《C/C++(基础编码-补码详解)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【转载】Python,使用Wheel打包Linux中断信号的查看下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#去掉json字符串中的换行符

【出错状况】 从数据库中返回json格式的数据,但由于数据库中的数据中有换行符,导致返回的json数据错误。 【原因分析】 用for循环语句来分析出错字段字符串中每个字符的ASCII码,可以看出存在值分别为13、10的两个字符,造成换行,导致json格式出错。            char tempstring = '\n';   (10)       ...

整体二分

关于整体二分的学习其实只是了解了普通二分之后自然就懂了整体二分了。没有很难但是基于整体二分是基于时间和值域的分治。 比CDQ要更强一点。因为可以在一些离线的题目当中代替树套树什么的。 同时也非常的好写 。至少代码好懂。 首先是值域上的二分 这个二分是分离不同的值毕竟不同的值在不同的区间之内。我们可以将其二分。但是单次二分也是可以得到整体的信息的不妨把所有的...

IOS(数据库的应用)

在iPhone的开发过程中常常会用到数据库,而SQLite3是iPhone中支持的数据库。下面简单介绍一下iPhone中SQLite3数据库的用法: SQLite3简介 SQLite3是一个轻量级的数据库,完全使用C语言编写,使用简单方便。它是一个嵌入到程序进程的数据库,和其他一些数据库(MySQL,MS SQL)不同,它没有独立的进程。 1、打开数据库...

IDA,很好很强大

IDA,这款可以把程序反编译成C语言的东西。。 我用我们老师C++课上留的一道小学奥赛水平的弱智题的程序代码为例,先用MinGW编译,结果用IDA反编译出了几千个函数,全都是sub_加编号的名称,每一个都很短,变量名都是v1、v2等等的,一点也看不懂,我甚至连主函数在哪里都找不到。 然后又用VS2010编译,再反编译,令我大开眼界,函数名、变量名全能被...

gcc 编译器参数

一、GCC编译过程 参考:http://hi.baidu.com/zengzhaonong/item/c00e079f500adccab625314f-------------------------------------    Pre-Processing   cpp        预处理    Compiling        ccl       ...

STL之六:map/multimap用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap     使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。mul...