【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

本来前几天,当我在csdn上的博客访问量突破一百万的时候,当时想写一些东西的。但是,后来由于遇到其他事情,这个想法就被耽搁了。对于这个访问量,我个人而言倒是没有看得太重。一方面,如果我写的东西对大家还有所帮助的话,那是最好不过的事情;另一方面,我也清楚地知道自己还有很多的不足,每次得到别人夸奖的时候,我都显得诚惶诚恐,生怕有一丝丝骄傲和自满。对我而言,唯有踏实走好每一步,才能时刻保持内心的平静。

说了上面这些,还是转移到我们今天的话题,即符号数据与无符号数据。有过软件编写经验的朋友都知道,计算机里面其实是无所谓有符号数据和无符号数据。但是,为了计算的方便和现实的需要,我们人为划分了有符号数据和无符号数据。举个例子来说吧,0x80这是简单的8 bit数据,如果按照unsigned char来看的话,它表示128;当然如果按照有signed char来看的话,它表示-128。其实不管怎么看,它都是0x80。有了这些基础,我们来看一个范例,

#include <stdio.h>
void test()
{
char p = 0x80;
unsigned int n;
int m = p << 8;
printf("0x%08x\n", m);
m = (unsigned char)p << 8;
printf("0x%08x\n", m);
n = p << 8;
printf("0x%08x\n", n);
n = (unsigned char)p << 8;
printf("0x%08x\n", n);
}
int main(int argc, char* argv[])
{
test();
return 1;
}

上面的代码内容其实就是一段测试代码。这其中p、m是有符号的数据,n则是没有符号的数据。如果有兴趣的朋友,可以把这段代码编译一下。从结果中可以发现,如果对p没有进行预处理的话,那么实际上是作为有符号的数据参与运算的,具体表现在m、n在p直接移位的时候,打印的数据为0xFFFF8000;相反,如果对p进行了强制转换后,那么打印的数据为0x00008000。这些都说明在处理无符号、符号数据转换的时候需要特别小心,在算术运算、比较运算、移位运算和逻辑运算的时候,都有可能得到不一样的结果。当然,我们自己需要对这些计算规则聊记于心,比如

(1)符号数据转换的时候,cpu会默认添加符号位;

(2)符号数据、无符号数据比较的时候已经要分清楚,弄不好会造成死循环,比如说把有符号数据当成了无符号数据就会出现这种情况;

(3)符号数据、无符号数据转换的时候要进行显式强转;

(4)不清楚的操作就添加括号,确保万无一失;

(5)如果最后还是不确定cpu的操作规则,可以自己编写一个简单的demo代码确认一下。

随想录(符号数据与无符号数据)相关推荐

  1. 理解有符号数和无符号数的区别

    理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数.同样是年纪和工资,前者不需要有负值,但后者可能需要--至少所有的老板都这样认为. 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不 ...

  2. C - 有符号数和无符号数扩展

    C语言标准要求先进行数据大小的转换,之后再进行无符号和有符号之间的转换. C语言中的强制类型转换保持二进制位值不变,只是改变解释位的方式. 将无符号数转换为更大的数据类型时, 只需简单地在开头添加0, ...

  3. 理解有符号数和无符号数的区别。

    理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数.同样是年纪和工资,前者不需要有负值,但后者可能需要--至少所有的老板都这样认为. 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不 ...

  4. 有符号数与无符号数之间运算问题

    欢迎探讨,感觉写的不能达意. 1 读了<深入理解计算机系统>后,觉得下面{{{{  }}}}}所有内容可以总结为如下,无符号数与有符号数间的转换就是数值在内存的位模式不变,改变的是对位模式 ...

  5. 有符号数与无符号数的运算

    C++的int等类型数据默认为有符号的. 对于无符号数,必须保证其值不能为负数,否则就会造成意外. 有符号数与无符号数的运算规则如下: 表达式中既有无符号数又有有符号数,则有符号数会自动转换为无符号数 ...

  6. 理解有符号数和无符号数负数

    理解有符号数和无符号数负数在计算机中如何表示呢?  这一点,你可能听过两种不同的回答.  一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的 ...

  7. C语言中 有符号数、无符号数、整数溢出

    #include<stdio.h> void main() {int l=-1;unsigned int c=135; printf("%u\n",l+c); } 这个 ...

  8. 2、有符号数与无符号数

    前言 狄泰软件唐老师的个人学习笔记 1.有符号数 有符号数中数据类型的最高位是数据的符号位 最高位为1,表明这个数为负数 最高位为0,表明这个数为正数 实验:检验数据的最高位是否是 符号位 #incl ...

  9. 有符号数与无符号数比较-详解

    正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等.大家有没想 ...

最新文章

  1. 目标检测推理部署:优化和部署
  2. vs中如何开发mysql_VS2015如何连接mySQL数据库图文
  3. 用Apache的HTACCESS保护密码
  4. 安卓编程用什么软件_震惊!安卓IOS都可以用的牛逼软件
  5. ul+js模拟select
  6. Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)
  7. java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
  8. 安装hexo,建站并新建博客
  9. 20 位行业专家共话选型经验,CSDN「选型智囊团高端研讨会」圆满落幕!
  10. Oracle数据库模糊查询
  11. java实现AES密钥生成
  12. Java中NIO详解
  13. 第六章:组合数据类型练习[人名独特性统计]学习思考
  14. 如何更改windows桌面图标,更改桌面图标方法
  15. android 输入法字典_Android输入法-创建输入法
  16. 两个pdf合并成一个pdf,操作方法
  17. IGBT静态参数测试系统可测项目有哪些?
  18. 蓝牙4.2 安全连接
  19. 我国数字经济规模增值世界第一,宝付发力支付+SaaS
  20. mysql数据库备份和恢复

热门文章

  1. iostat命令简单使用
  2. Bash漏洞引发僵尸网络狂欢
  3. 1c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(24) : fatal error C1189: #err
  4. CSS轮廓 边距 填充 分组和嵌套
  5. HPU 1476: 括号括号
  6. 学号 2016-2017-20155329《Java程序设计》课程总结
  7. C# ?? 操作符示例
  8. 实现图片大小的自动控制( 图片大小控制CSS代码)
  9. ZF环境要求及如何配置
  10. Com 方法默认参数值设置