1.c/c++类型的一般大小

bool char short int  long float double
  1 byte 2 bytes 4 bytes 4 bytes 4bytes 8bytes

2.数据的+/-计算

  • a、加法
0 0 0 0 0 1 1 1

+

1 0 0 0 0 1 1 1

=

0 0 0 0 1 0 0 0
  • b、负数的二进制表示

-7 由与+7相加得0可以推出:

0 0 0 0 0 0 0 0

-

0 0 0 0 0 1 1 1

=

1 1 1 1 1 0 0 1

原因是-7和+7相加必然为0,对于计算机清零有一种手段,即为高位溢出。因此负数的二进制表示可以认为是对应正数各位取反,再+1。

3.长短类型之间赋值的处理

  • 对于长短类型之间赋值,长类型赋值给短类型时,直接截断高位。即:

int    

0000 0000 1000 0001

to 

short

1000 0001
  • 对于短类型赋值给长类型时,则会发生符号位扩展。如果有符号位的话:

char

1001

to

short

1111 1001
  • 符号位则会扩展到前面的位中,以保证高位溢出各位清零的多米诺效应。

4.float类型二进制各位表示的协议

Stanford CS107 Programming Paradigms 编程范式 课程笔记

example.

int i =37;

float f = *(float*)&i;

当采用float类型解析int类型的数据时,二进制的各位将按照上图的规则进行解析计算:

  • 0000 0000 0010 0101

    xxxxxx=2^-3+2^-6+2^-8

(-1)^0 *1.xxxxxx*2^-127
 

  • last

float j = 7.0;

short i = *(short*)&j;

=========

同理即为用short去解析float的各个二进制位。

相关文章:

  • 2021-12-21
  • 2021-05-19
  • 2022-12-23
  • 2021-09-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-29
猜你喜欢
  • 2021-09-22
  • 2021-07-14
  • 2021-12-28
  • 2021-04-25
  • 2021-04-22
  • 2021-06-10
  • 2022-12-23
相关资源
相似解决方案