C语言进制

一  原码、反码、补码

    计算机存储的数为补码

    数分为有符号(正、负)和无符号(全是正)

    原码

    正数:数转换为2进制,最高位如果是0,则是整数

    负数:数转换为2进制,最高位如果是1,则是负数

    反码

    正数:整数的反码还是它的原码

    负数:除符号位不变,其它各位,逐位取反

    补码

    正数:整数的补码还是它的原码

    负数:反码+1

    2)为什么要使用补码?

    补码主要是用于设计计算机的减法

    3)已知负数的原码求补码

    1)反码:除符号位之外,取反

    2)补码:反码+1

    4)已知补码求原码:

    补码取反加1为原码

二:位运算:

    一个数的二进制机器码之间的运算

    C语言中的位运算符介绍:

    是一个双目运算,需要有两个操作数

    1)&  按位与 (比较两个数对应的数码,如果都为1,则结果为1)

    口诀:同1为1

    2)|  按位或(比较两个数对应的数码,如果有一个为1,则结果为1)

    口诀:有1为1

    3)^  按位异或(比较两个数对应的数码,如果两个码相同则为0,不同则结果为1)

    口诀:相同为0,不同为1 

    4)~  按位取反(单目运算,数码逐位取反)

    口诀:0变1,1变0

    5)>> 按位右移 

    表示所有的二进制位,整体右移n位

    注意:

    1)数值得变化:每向右移动1位相当于除以2,保留整数部分

    2)右移的时候,高位补符号位,低位直接舍弃

    3)向右移动的时候,不会改变一个数的正负性

    6)<< 按位左移

    表示:所有的二进制位,都向左移动

    左移:

    1)左移可以让一个数变大

    左移1次相当于*2

    2)左移可能会改变一个数的正负性

    3)高位舍弃,低位补0

    技巧:

    1)任何数和1进行按位与(&) 的到这个数的低位

三:变量的存储:

    查看变量的地址使用 %p

    1)内存是由若干个1个字节的存储单元组成

    每个单元都有一个唯一的地址

    2)内存存储数据是从高地址向地地址分配的

    数据有高位和地位

    int a =10;

    00000000 00000000 00000001 00001010

    高                                低

    一个整数的各个字节存放的顺序:地位存放低地址  高位存放高地址

    3)变量在内存中最小的那个地址,是变量的首地址

四: 变量的修饰符:

    1)改变变量的存储空间

    short   2个字节   -2^15 ~ 2^15-1;

    int     4

    long    8

    long long 8

    2)改变变量的符号

    signed   有符号数(默认的时有符号的)

    unsigned 无符号数

五://注意:char型的常量和变量存储方式是有差别的

    char c ='a';     //97     1个字节 -128,127

    int size = sizeof(c);     //1

    //在C语言中char的常量会被当做整形数据存储

    size = sizeof('a');

    printf("%d ",size);

    //1、存储的原理,取出字符对应的ascii码值,转换成2进制,存储到一个字节中

    char ch='A';  //65     01000001

    //以字符型的形式取出来:内存存的是65,到ascii码表中查找ascii码值等于65的字符   找到这个字符取出来

    printf("%c ",ch);

原文地址:https://www.cnblogs.com/-boy/p/4031816.html