计算机中的符号位
1. 数据类型的最高位用于标识数据的符号
- 最高位为1,表明这个数为负数
- 最高位为0,表明这个数为正数
验证计算机用最高位表示符号位
结果为 :
2. 有符号数的表示法
在计算机内部用 补码 表示有符号数
- 正数的补码为正数本身
- 负数的补码为负数的绝对值各位取反后加一
实例 :负数-8在计算机内部的表示(推演)
输出 :
推演 :
原数: -8 ===> 取绝对值 ===> 8 ===> 二进制表示 ===>
0000 0000 0000 0000 0000 0000 0000 8000 ===> 对其各位取反
1111 1111 1111 1111 1111 1111 1111 0111 ===> 加一
1111 1111 1111 1111 1111 1111 1111 1000 ===> 16进制表示为0xFF FF FF F8
使用PC计算器验证:
3. 在计算及内部用 原码 表示无符号数
- 无符号数默认为正数
- 无符号数没有符号位
对于固定长度的无符号数
- MAX + 1 ----》 MIN
- MIN – 1 ----》 MAX
Unsigned 关键字声明变量为无符号类型
注 : C 语言中只有整数类型能够声明 Unsigned 变量,eg:char,short,int,long.....;浮点数不可以用Unsigned 声明
探索:
如果有符号数和无符号数相遇,会发生什么什么样的火花呢?
输出 :
按照正常的逻辑 : 结果不应该是-10,小于0嘛?
解析: 当有符号数遇到无符号数,一起运算的时候 , 有符号数被转换为了无符号数.
而-20被看作无符号数的时候 , 二进制为如下,是一个非常非常大的数.
而上述的二进制数表示为无符号的整形数为 :
所以结果会输出一个正数.