zoukankan      html  css  js  c++  java
  • C/C++ 有符号数和无符号数

      在开始话题前,不妨先来看看以下这段代码

     1 #include <iostream>
     2 #include <stdio.h>
     3 
     4 int main() {
     5     int a = -1;
     6     unsigned int b = 1;
     7     std::cout << "a > b is " << (a > b) << std::endl;
     8     std::cout << "a - b = " << (a - b) << std::endl;
     9     return 0;
    10 }

      其实这段代码的目的很简单,就是给有符号变量a赋值为-1,给无符号变量b赋值为1,然后就比较大小以及求它们的差,很简单,对吧?对结果想必心里都有底了,但我们还是运行一下程序,印证我们的答案吧。

      如果输出结果和你心中的答案一样,那下面的内容就可以不用看了,如果不一样,那就看看吧。

      首先,当有符号数和无符号数一起运算时,所有数都会自动转换为无符号数。在计算机中,数值都是以补码的形式存在,对于-1来说,其在32位机器中表示为ffff_ffff,最高位为1,代表其是一个负数。当其转变为无符号数时,最高位不再代表正负,而是代表数值了。十六进制的无符号数ffff_ffff在十进制中是4294967295,也就是说转换为无符号数后,a=4294967295,而b=1,由此就可以理解为什么上述代码会得出这样的结果了。

      另外,对于浮点数来说,不存在无符号这一说法,浮点数都是有符号的,不存在有符号数向无符号数转换的问题。


      参考:有符号数和无符号数间的比较

  • 相关阅读:
    快速指引(CDH6.3.2)
    gRpc 跨语言调用(NetCore 与 Spring Boot)
    Windows 极简利器
    Jenkins 于Docker 中源配置
    Kettle 问题
    在 Ubuntu 下直接将二进制文件制作成 rpm 包
    麒麟常见问题
    基于jssip的简单封装
    带有handleEvent的eventEmitter
    js集锦
  • 原文地址:https://www.cnblogs.com/IamTing/p/4604518.html
Copyright © 2011-2022 走看看