一大波黑色C语言·

来源:互联网 发布:linux 如何进入grub 编辑:程序博客网 时间:2024/04/30 05:12

一、原反补码

  1. 原码:
    原码就是符号位加上真值的绝对值, 即用第一位表示符号(正负,负数为1,正数为0), 其余位表示值.原码是人脑最容易理解和计算的表示方式.
  2. 反码:
    正数的反码是其本身负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
  3. 补码:
    正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
    注意:*正数的原反补码都是自身**

出现过程:
  原码是人脑能直接识别并用于计算的表示方式,我们在计算数据的时候回根据符号位去计算数据(符号位不计入计算),但是计算机进行加减乘除基本运算的时候,如果要去辨别符号位的话就变得很复杂了,而这个时候人们就想出了将符号位也参与运算,这个时候就吹出现了反码。我们知道a-b = a+(-b)这个时候就将减法改变成加法来运算,从而减少了计算机去辨别负数的符号位,解决了减法的问题,但是出现了问题—–>0 我们计算得到结果的时候首位仍为符号位,如果该数为0的话 反码中会出现 +0 -0的区别,但是我们都知道0带符号是没有意义的,这个时候就出现了补码。计算机中数据就是以补码形式存在的。

二、隐式转化

  隐式类型转换分三种,即算术转换、赋值转换和输出转换。

    1. 算数转换:算术运算(加、减、乘、除、取余以及符号运算)时,不同类型数招必须转换成同 一类型的数据才能运算,算术转换原则为:对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,int long float double
     2. 赋值转换:进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。
    3. 输出转换: 在程序中将数据用printf函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,便自动进行类型转换,如一个long型数据用整型格式(%d)输出时,则相当于将long型转换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将char型转 换成int型输出。注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则 转换时将出错。

三、计算机系统

1. 32位操作系统

  char :1个字节(固定)
(即指针变量): 4个字节(32位机的寻址空间是4个字节。同理64位编译器)(变化)
  short int : 2个字节(固定)
  int: 4个字节(固定)
  unsigned int : 4个字节(固定)
  float: 4个字节(固定)
  double: 8个字节(固定)
  long: 4个字节
  unsigned long: 4个字节(变化*,其实就是寻址控件的地址长度数值)
  long long: 8个字节(固定)

2. 64位操作系统

  char :1个字节(固定)
*(即指针变量): 8个字节
  short int : 2个字节(固定)
  int: 4个字节(固定)
  unsigned int : 4个字节(固定)
  float: 4个字节(固定)
  double: 8个字节(固定)
  long: 8个字节
  unsigned long: 8个字节(变化*其实就是寻址控件的地址长度数值)
  long long: 8个字节(固定)

其他

  #pragma 是设定编译器的状态或者是指示编译器完成一些特定的动作。
  #define是预编译指令
  sizeof()是运算符。

0 0
原创粉丝点击