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,由此就可以理解为什么上述代码会得出这样的结果了。

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


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

  • 相关阅读:
    dracut-initqueue timeout
    Request.Url
    ipv4 ipv6数据库存储
    DataRow To DataTable
    AS ShortCut
    linq on 多链接条件
    SQL逻辑查询语句执行顺序
    ckeditor 使用几点
    SqlDataAdapter 更新插入 与 InsertBulkCopy
    HTTP协议改HTTPS
  • 原文地址:https://www.cnblogs.com/IamTing/p/4604518.html
Copyright © 2011-2022 走看看