C语言之有符号数和无符号数

计算机中的符号位

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被看作无符号数的时候 , 二进制为如下,是一个非常非常大的数.

而上述的二进制数表示为无符号的整形数为 : 

所以结果会输出一个正数.

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值