C语言-无符号数与有符号数不为人知的秘密
一、无符号数与有符号数
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语言-无符号数与有符号数不为人知的秘密的更多相关文章
- C语言中无符号数和有符号数之间的运算
C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. un ...
- matlab和FPGA中无符号数和有符号数的转化(转)
在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题.(1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理中 ...
- C语言迷题:有符号数与无符号数的问题(转)
https://my.oschina.net/kelvinfang/blog/134725
- C语言中 有符号数、无符号数、整数溢出 (转)
#include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } ...
- java 理解有符号数和无符号数
转至:http://jinguo.iteye.com/blog/212049 理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用“ ...
- c的基础 1. 无符号数和补码
计算机中储存和处理的信息是以二进制信号表示的.单个的位不是是很实用,而将这些位 组合在一起,加上某种解释,即给不同的可能位模式赋予含义,我们就行表示怎样有限集合的元素,即实现各种数据结构.计算机中使用 ...
- Verilog有符号数处理
内容主要摘自以下两个链接: https://www.cnblogs.com/LJWJL/p/3481995.html https://www.cnblogs.com/LJWJL/p/3481807 ...
- 关于vector变量的size,是一个无符号数引发的bug。LeetCode 3 sum
class Solution { public: vector<vector<int>> threeSum(vector<int>& a) { vector ...
- 深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字
上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言 ...
随机推荐
- redis 5.0.7 源码阅读——跳跃表skiplist
redis中并没有专门给跳跃表两个文件.在5.0.7的版本中,结构体的声明与定义.接口的声明在server.h中,接口的定义在t_zset.c中,所有开头为zsl的函数. 一.数据结构 单个节点: t ...
- 小白的linux笔记4:几种共享文件方式的速度测试——SFTP(SSH)/FTP/SMB
测试一下各个协议的速度,用一个7205M的centos的ISO文件上传下载.5Gwifi连接时,本地SSD(Y7000)对服务器的HDD: smb download 23M/s(资源管理器) smb ...
- Angular4.0环境搭建
1.安装nodejs 先装nodejs,如果你的电脑已经装过了,最好确认是比较新的版本,否则可能会出问题 下载地址:https://nodejs.org/en/download/ 安装过程很简单,一直 ...
- AGC018F - Two Trees
题意 有两棵节点数均为 n 的有根树,你需要构造一个序列 \(X_1,X_2,...,X_n\).使得对于每一棵树的每一个节点, 若令它所有的后代(包括它本身)为 \(a_1,a_2,...,a_k\ ...
- 洛谷 UVA11388 GCD LCM
UVA11388 GCD LCM Description of the title PDF The GCD of two positive integers is the largest intege ...
- Beego 输出数据格式JSON、XML、JSONP
JSON.XML.JSONP beego 当初设计的时候就考虑了 API 功能的设计,而我们在设计 API 的时候经常是输出 JSON 或者 XML 数据,那么 beego 提供了这样的方式直接输出: ...
- linq行转列
using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text; ...
- js获取页面缩放比例
今天在网上看到一位大神写的一篇文章,出处记不得了,只是因为我在做项目的时候需要用到所以看了一眼. 经理要求我把两张图表上下排列(非响应式的)改成可以适配浏览器的,刚开始只是想改样式,看到代码才发现原来 ...
- 【内推】2020微软苏州Office365众多核心团队热招150+研发精英!欢迎推荐
2020微软苏州Office365众多核心团队热招150+研发精英!欢迎推荐 大家好,目前微软Office365核心团队在美丽宜居的苏州有150多的社招职位虚位以待,欢迎大家自荐,推荐,转发!除以下列 ...
- windows系统安装Java(详细版)
1.下载JDK 官网下载: www.oracle.com/technetwork… 百度云下载: pan.baidu.com/s/1LGf3Podz…提取码:s6mg (官网下载步骤) 进入官网 ht ...