一、无符号数与有符号数

1.计算机中的符号位

数据类型的最高位用于标识数据的符号

  -最高位为1,表明这个数为负数

  -最高位为0,表明这个数为正数

 #include <stdio.h>

 int main()
{
char c = -;
short s = ;
int i = -; printf("%d\n", ( (c & 0x80) != ));
printf("%d\n", ( (s & 0x8000) != ));
printf("%d\n", ( (i & 0x80000000) != )); return ;
}

2.有符号数的表示法

在计算机内部用补码表示有符号数

  -正数的补码为正数本身

  -负数的补码为负数的绝对值各位取反加一

3.无符号数的表示法

在计算机内部用原码表示无符号数

  -无符号数默认为正数

  -无符号数没有符号位

对于固定长度的无符号数

  -MAX_VALUE+1 ->MIN_VALUE

  -MIN_VALUE - 1 ->MAX_VALUE

C语言中默认为有符号数类型

unsigned 关键字声明变量为无符号类型

C语言中只有整数类型能够声明unsigned变量

当有符号数遇到无符号数时:

实例分析:

 #include <stdio.h>

 int main()
{ unsigned int i = ;
int j = -; if( (i + j) > )
{
printf("i + j > 0\n");
}
else
{
printf("i + j <= 0\n");
} return ;
}

有符号数要转换成无符号数

错误使用unsigned

实例分析2:

 #include <stdio.h>

 int main()
{ unsigned int i = ; for(i=; i>=; i--)
{
printf("i = %u\n", i);
} return ;
}

小结:

有符号数用补码表示

  -正数的符号位为0

  -负数的符号位为1

无符号数用原码表示

  -无符号数没有符号位

  -无符号数只有表示正数

unsigned只能修饰整数类似的变量

当有符号与无符号数混合计算时,会将有符号数转换成无符号数再进行计算,结果为无符号数

C语言-无符号数与有符号数不为人知的秘密的更多相关文章

  1. C语言中无符号数和有符号数之间的运算

    C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. un ...

  2. matlab和FPGA中无符号数和有符号数的转化(转)

    在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题.(1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理中 ...

  3. C语言迷题:有符号数与无符号数的问题(转)

    https://my.oschina.net/kelvinfang/blog/134725

  4. C语言中 有符号数、无符号数、整数溢出 (转)

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

  5. java 理解有符号数和无符号数

    转至:http://jinguo.iteye.com/blog/212049 理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用“ ...

  6. c的基础 1. 无符号数和补码

    计算机中储存和处理的信息是以二进制信号表示的.单个的位不是是很实用,而将这些位 组合在一起,加上某种解释,即给不同的可能位模式赋予含义,我们就行表示怎样有限集合的元素,即实现各种数据结构.计算机中使用 ...

  7. Verilog有符号数处理

    内容主要摘自以下两个链接:  https://www.cnblogs.com/LJWJL/p/3481995.html  https://www.cnblogs.com/LJWJL/p/3481807 ...

  8. 关于vector变量的size,是一个无符号数引发的bug。LeetCode 3 sum

    class Solution { public: vector<vector<int>> threeSum(vector<int>& a) { vector ...

  9. 深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

    上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言 ...

随机推荐

  1. 【Android开发艺术探索】理解Window和WindowManager

    个人博客: http://www.milovetingting.cn 理解Window和WindowManager Window表示一个窗口的概念,是一个抽象类,具体实现是PhoneWindow,可以 ...

  2. 洛谷 P4298: bzoj 1143: [CTSC2008]祭祀

    题目传送门:洛谷 P4298. 题意简述: 给定一个 \(n\) 个点,\(m\) 条边的简单有向无环图(DAG),求出它的最长反链,并构造方案. 最长反链:一张有向无环图的最长反链为一个集合 \(S ...

  3. 5种PHP生成图片验证码实例

    5种PHP生成图片验证码实例,包括数字验证码.数字+字母验证码.中文验证码.仿google验证码和算术验证码,PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session ...

  4. ES6中map数据结构

    key值可以任意值或对象,value值可以是任意值或对象 let json={ name:'eternity', skill:'java' }; let map=new Map(); map.set( ...

  5. mysql必知必会--检 索 数 据

    SELECT 语句 SQL语句是由简单的英语单词构成的.这些单词称 为关键字,每个SQL语句都是由一个或多个关键字构成的.大概,最经常 使用的SQL语句就是 SELECT 语句了.它的用途是从一个或多 ...

  6. SWIG 3 中文手册——10. 参数处理

    目录 10 参数处理 10.1 typemaps.i 库 10.1.1 引言 10.1.2 输入参数 10.1.3 输出参数 10.1.4 输入 / 输出参数 10.1.5 使用不同的名称 10.2 ...

  7. go 算法与数据结构

    数据结构 稀疏数组 package main import "fmt" /* 稀疏数组 案例:五子棋存盘与复盘 节省存储空间 */ type ValNode struct { ro ...

  8. 【第三篇】C#调用lua文件

    获取一个全局基本数据类型 使用LuaEnv.Global.Get<T>("name")就可以 var str = luaEnv.Global.Get<string ...

  9. Enityt模型特性

    数据验证相关的数据注解: 特性 解释 Remote 使用 jQuery 验证插件远程验证程序的特性 FileExtension 验证文件扩展名 Compare 比较两个属性的值 RegularExpr ...

  10. NFS部署

    yum install nfs-utils -y systemctl restart/enable nfs systemctl status rpcbind vim /etc/exports /dat ...