编程必备知识

作者: 维乾 | 来源:发表于2017-10-22 12:29 被阅读47次

    数据类型

    数据的输入和存储。可以分为

    A.基本数据类型(四类八种)

    (整形:  int(4个字节)      短整型short(2个字节)  长整形long(8个字节)  字节byte (1个字节8位)  )  int:32 位、最常用,-2^31-1~2^31  (21 亿)

    (浮点型:  单精度浮点数float(4个字节)  双精度浮点数double(8个字节)  )

    (字符:  char(在C语言中占1位 在java c# 中占2个字节 )  char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。 )

    (布尔类型:   true   和 false    )

    B.引用数据类型

    (类,接口,数组)


    变量

    (变量的本质是内存中一段存储空间)

    IntI; i=5;

    i是变量,程序向系统申请了一个内存单元,在程序运行中,i的值可以改变,但程序结束后,其所占的空间不是释放,而是被系统收回权限。


    进制



    补码

    问题:

    一个int类型的变量所能存储的数组的范围是多少?    -2^31~2^31-1

    最小负数的二进制代码是多少?1000 0000 0000 0000 0000 0000 0000 0000 

    最大正数的二进制代码是多少?0111 1111 1111 1111 1111 1111 1111 1111

    已知一个整数的二进制代码求出原始的数字?FFFFFFF5  --->   -11

    数字超过最大正数会怎么样?例如一个数1位的二进制是0111 1111(127)+0000 1010(10) = 1000 1001  =》 -119

    不同的数据类型相互转换?char ch = 128      printf("%d",ch)    -127    int->char  0000 0000 0000 0000 0000 0000 1000 0000   代表128  那么这是char只有8个字节  所有将int左边多出的字节省去  就剩1000 0000  就是 -127


    原码:也叫符号  绝对值码 

          最高位0表示正  1表示负  ,其余二进制位是该数字的绝对值的二进制位(-5(八位的二进制数)   表示10000101  因为负号是1,5是0000101)

    优点:简单易懂  缺点:加减运算复杂  存在加减乘除四种运算,增加了CPU的复杂度零的表示不唯一(100000000或者0000000)

    在计算机中,从未被使用!

    -----------------------------------------

    反码:

    反码运行不便,也没有在计算机中应用

    -----------------------------------------

    移码:

    移码表示数值平移n位,n称谓移码量,移码主要用于浮点数的阶码的存储

    -----------------------------------------

    补码:(在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

    A已知十进制求二进制

    求正整数的二进制

    2取余,直到商为零,余数倒序排列

    求负整数的二进制

    先求出与该负数相对应的正整数的二进制代码,

    然后,将所有位取反末尾加1,不够位数时,左边补一

    4字节int-5先求5的二进制

    0000 0000   0000 0000     0000 0000  0000 0101  所有位取反,末尾加1

    1111 1111   1111 1111     1111 1111  1111 1011   16进制:FFFFFFFB

    2字节short int(-3)先求3的二进制

    0000 0000 0000 0011所有位取反,末尾加1

    1111 1111 1111 1101     用十六进制表示:  FFFD

    求零的二进制

    全是零(100000000000....这表示最小的负数)

    B已知二进制求十进制 

    如果首位是0,则表明是正整数,

    按普通方法来求

    如果首位是1,则表明是负整数,

    将所有位取反末尾加1,所得数字就是该负数的绝对值

    习题:FFFFFFF5 已知二进制  求其代表的整数是多少?

    1111 1111 1111 1111 1111 1111 1111 0101

    由于最高位是1,所以最终是负数,先对其所有取反

    0000 0000 0000 0000 0000 0000 0000 1010 末尾加1后

    0000 0000 0000 0000 0000 0000 0000 1011  该值为11 所以最终结果:-11


    位运算符(现实意义,对数据的操作精确到每一位)

    提问   如果想让一个数的第五位为零 要怎么操作?

    int  a   ; a  =   a&1111101111    这样a的第5位就一定位零  其他位不变。

    &  ---按位与(&&逻辑与 也叫并且)&& 与&的含义完全不同(短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。)而& 1  不具备短路用途

    1&1 = 1               1&0 = 0          0&1 = 0         0&0 = 0            5&7 = 5    21&7 = 5   5&1 = 1    5&10 = 0   

    5->00000101    7->00000111             00000101&00000111 = 000000101 

    | ---按位或 (||逻辑或 )

    1|0 = 1    1|1 = 1    0|1 = 1  0|0 = 0   5|7 = 7    5|3 = 7

    ~  ---按位取反  (~i   就是把i变量所有的二进制位取反)

    ~0101   -》1010

    ^   ---按位异或(相同为0  不同为1)

    1^0 = 1   0^1 = 1  0^0 = 0  1^1 = 0     5^3 = 7

    <<  ----按位左移(数向左移动几位数  补零)  

    5>>1 = 50 (相当于乘于10^1次方)    二进制  0101>>2  010100 (相当于乘于2^2次方)           

    >>   ---按位右移()

    相关文章

      网友评论

      • M23:排版有点乱,看起来累
        维乾:@M23 是的 ,没注意排版 多谢提醒

      本文标题:编程必备知识

      本文链接:https://www.haomeiwen.com/subject/vklguxtx.html