C语言基础(4)-原码,反码,补码及sizeof关键字

 1. 原码

+7的原码是0000 0111

-7的原码是1000 0111

+0的原码是0000 0000

-0的原码是1000 0000

2. 反码

一个数如果值为正,那么反码和原码相同。

一个数如果为负,那么符号位为1,其他各位与原码相反

+7的反码0000 0111

-7的反码1111 1000

-0的反码1111 1111

3. 补码

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

正数:原码,反码补码都相同

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

-7的补码:=

1000 0111(原码)

1111 1000(反码)

1111 1001(补码)

+0的补码为00000000

-0的补码也是00000000

根据负数的补码求原码:补码符号位不变,其他位求反,最后整个数 + 1,得到原码

 

 

 

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

7-6=1

7的补码和-6的补码相加:00000111 + 11111010 = 100000001

进位舍弃后,剩下的00000001就是1的补码

-7+6 = -1

-7的补码和6的补码相加:11111001 + 00000110 = 11111111

11111111-1的补码

4.sizeof关键字

sizeof不是函数,所以不需要包含任何头文件,计算一个数据类型的大小,单位:BYTE

其实C语言不规定具体数据类型的大小,所以数据类型实际的大小和系统是息息相关的,但是相同的系统下,同数据类型大小一定是一样的。

size_t类型在32位操作系统下是unsigned int,就是一个无符号的整数。当我们写程序要处理一个不可能出现负值的时候,一般用无符号数,这样可以增大数的表达最大值。

原文地址:https://www.cnblogs.com/yongdaimi/p/6229360.html