C笔记(三)——进制与进制转换,原/补码

进制转换

一、二进制数:位、字节与字

    位:只有0、1两种状态,简称bit;

    字节:由8个二进制数组成,称为8位,简称BYTE

    字:由两个字节组成,简称DWORD。1字=2字节=32位

    例如:U盘的单位是GB(GBYTE),字节。网速Mb,bit。

二、八进制

    以8为基数的数制系统(0-7),C语言中0表示八进制,即0123表示八进制123。-011表示八进制-11,即十进制-(1*8^1+1*8^0)=-9

三、十六进制

     以16为基数的数制系统(1-9,A-F),C语言中0x表示十六进制,即0x123表示十六进制123,即十进制1*16^2+2*16^1+3*16^0=256+32+3=291.

四、进制转换

4.1 以二进制为基准转换

    eg:将以下二进制数分别转换为八进制,十六进制。

    110101001001010

   (1)转为八进制:从后往前,每3位为一组。

    二进制: 110 101 001 001 010

    八进制:   6     5    1    1     2

     (2)转为十六进制:从后往前,每4位为一组。

    二进制:  110 1010 0100 1010

    十六进制: 6     a      4       a

4.2 以十进制为基准转换

    (1)十进制转二进制,用十进制数作为被除数,2作为除数,取商和余数,连续除直到商为0,将余数倒过来就是转换后的结果。

    (2)十进制转八进制,用十进制数作为被除数,8作为除数,取商和余数,连续除直到商为0,将余数倒过来就是转换后的结果。

   eg: 将十进制50转化为八进制:

    解:除数     商      余数

            8         6        2

            8         0        6

    得:八进制 062。

    (3)十进制转十六进制,用十进制数作为被除数,16作为除数,取商和余数,连续除直到商为0,将余数倒过来就是转换后的结果。

原码、反码、补码

    数据在内存中是以二进制形式存放的。(不同的编译系统为整型数据分配的字节数是不同的,比如Turbo C 2.0有两个字节的(16位),Visual C ++分配四个字节(32位))

    实际上,数值是以补码表示的。一个正整数的补码=原码=反码。负数的原码是将

一、原码

    最高位数为符号位(0表示正数,1表示负数)

    eg:+7的原码是 0000 0111

            -7的原码是 1000 0111

二、反码

    一个数的值为正,则其反码和补码相同

    若一个数的值为负,那么符号位为1,其他各位与原码相反。  

    eg:+7的反码是 0000 0111

            -7的反码是 1111 1000

三、补码

    原码和反码都不利于计算机的运算,如:原码表示7和-7相加,还需要判断符号位。

    正数;原码=反码=补码

    负数:最高位为1,其余各位原码取反,然后+1

    eg:-7的补码=?

    解:-7的原码=1000 0111 

          -7的反码=1111 1000(原码取反)

          -7的补码=1111 1001(反码加1或者原码取反加1)

        +255的二进制编码无论为何,它的原码还是+255,而且它的反码和补码都是+255.

           -255的二进制编码这样求得:由于它已超出一个8位字节所能表示的有符号数的范围,所以至少要用两个字节来表示,现就以2字节为例来说明.255的二进制编码是1111 1111,把它扩展为2字节是0000 0000 1111 1111,还要加个负号,就是要在数据的最高位前放1,就成了0000 0001 1111 1111,

            原码:而且根据实际需要,这负号要向高位扩展到满字节,即:1111 1111 1111 1111,

        而反码规则是,符号位不变,数据位按位取反,既得:1111 1111 0000 0000.这数用十六进制表示是0xFF00,这就是计算机里-255的反码.

        补码:在反码的基础上加1得:1111 1111 0000 0001.

   用补码进行运算时,减法可通过加法实现

    eg1:7-6=1

    算它时将7的补码和-6的补码相加:0000 0111 + 1111 1010 = 1 0000 0001 (第一个1为符号位)

    eg1:-7+6=-1

    算它时将-7的补码和6的补码相加:1111 1001+ 0000 0110 = 1111 1111 (第一个1为符号位。注:这个值是-1的补码)

sizeof关键字

    sizeof是c语言关键字,用来求指定数据类型在内存中的大小。其单位是:字节。

    在4字节系统中,一个整数最大可以存放(2^32)-1位。

    eg: 

         printf(“%d\n”,10);

        或者

        int i = 10;

        printf(“%d\n”,i);

    结果是: 4字节


猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/79742968