栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言设计中的unsigned int 和signed int的区别解释

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言设计中的unsigned int 和signed int的区别解释

废话不多说直接进入主题:无符号的int和有符号的int的理解和代码演示,首先要知道计算机存储和运算数据都是按照补码方式存储的,不过int是负数的时候呢?

这就涉及到了数据的 原码  反码 补码,正数的原码和补码是一样的,反码的话就是~(取反)

负数的话 原码 的最高位是用来表示符号位的 0是整数 1是负数,反码~(除了符号位)、

补码就是在反码的基础上+1

下面用代码举例子:

 

上面b=-20 在计算机存储是补码的形式 -20的原码是 1000...10100,先求反码~得1111...01011

接着反码+1就是补码:1111...0101100在计算机中存储

在计算int和uint 时会把int当做uint参加运算 也就是全部bit都是数据bit,所以这里的-20如果和6对比的话是会输出 “>6”的。6的原码和补码相同都是0.....110  而此时的-20是1111...0101100 显然都当做是uint 来对比的话 -20一定是大于6的 32bit都是数据

下面说下%d和%u来输出控制:上面uint a=6 用%u来输出的话是6   而int b=-20也用%u 输出的却是 4294967276 显然b -20是大于 a 6的。

那(a+b)为啥输出-14呢?   -14不是比6小吗?

这是因为刚才上面说的运算时会当做uint来运算然后返回结果 然后%d输出-14, uint是全部数据bit 没有最高位符号位的。

其次 相关资料显示,我们C中%d与%u 程序去解释这⼀变量的数据的时候 是有区别的,
这里 %d在解释过程中第⼀位数据表示的是符号bit   

所以   (a+b)= -14    b= -20

而%u第⼀位数据表示的是数据bit

所以  b %u输出结果是 4294967276。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/975144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号