unsigned 和 signed
http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html
http://m.blog.csdn.net/blog/u010086298/37777607
先看两个例子
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned char a = -;
char b = a;
printf("%d %d",a,b); return ;
}
//结果:255 -1
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned short a = -;
short b = a;
printf("%d %d",a,b); return ;
}
//结果:65535 -1
在计算机中,负数是以补码来存储的。
C语言中常量整数 -1的补码表示为0xFFFFFFFF。截取后面16位FFFF赋值给 变量a(unsigned short)。此时 a = 0xFFFF(a没有符号位,0xFFFF转换为十进制为65535)。
a又将0xFFFF,直接赋值给short b。 此时 b = 0xFFFF(但是要注意,b是有符号的,0xFFFF转换为十进制为-1)。
执行printf("%d %d",a,b);的时候,要将 a和b的值先转换为int型:
a没有符号所以转为int型为0x0000FFFF,
b有符号转换为int型为0xFFFFFFFF。
十进制输出值 65535 -1.
#include <stdio.h>
int main(int argc, char *argv[])
{ unsigned int a = -;
int b = a;
printf("%d %d",a,b); return ;
}
//结果 -1 -1
a在内存中值为0xFFFFFFFF,b的值为0xFFFFFFFF,都已经32位,
a转换为int型的时候就是0xFFFFFFFF,所以输出-1.
规则整理
(1)如果转换前后位数相同,那么其实位本身并没有发生变化,变化的只是对位的解释(符号位)如unsigned int a = -1 int b=a
(2)如果位数变长了, 需要填充,分两种情况。a) unsigned 转换为signed,则填充0, b)signed 转换为unsigned,填充位与符号位相同
(3)如果位数变短了,则直接截断
规则(1)不多说
规则(2)a)由下面的例子验证
//定义了一个有符号的变量
unsigned char name = ;
int Pava = name;
//定义了一个短整型,
short Kava = name;
printf("%d\n%d\n",Pava,Kava);
// 输出 255 255
(2)b)
char name = ;
unsigned int Pava = name;
printf("%d\n",Pava);
//输出 -1
(3)
int name = ;
unsigned char Pava = name;
printf("%d\n",Pava);
// 输出 255
unsigned 和 signed的更多相关文章
- c语言中的unsigned 和 signed
我们来一起看下,C语言中,对于Integer Type(整数形式)的unsigned与signed两种形式的区别,以及在内存中的存储方式是如何的 Integer type(整数形式)是C语言中的基本数 ...
- 【转】mysql 中int类型字段unsigned和signed的区别
转自https://www.cnblogs.com/wangzhongqiu/p/6424827.html 用法: mysql> CREATE TABLE t ( a INT UNSIGNED, ...
- C++ char, unsigned char, signed char
C语言中的 char, unsigned char, signed char 一.他们是什么? signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8 ...
- mysql 中int类型字段unsigned和signed的探索
转自:http://www.0791quanquan.com/news_keji/topic_816453/ 探索一:正负数问题 拿tinyint字段来举例,unsigned后,字段的取值范围是0-2 ...
- C语言的补码表示和unsigned及signed的转换
这东西实际编程时一直无视的,范围小了就换个大点的表示形式,但是总觉得基础知识还是掌握得好,免得到时候用移位运算或类型转换或笔试题时要花时间想. C语言的基本类型有char.int.float.doub ...
- unsigned和signed
int分为unsigned(无正负号)和signed(有正负号) 一般int默认为signed unsigned和unsigned int意思相同
- 一段代码的疑问(1)——unsigned与signed
现象: 先来看一段代码: 这段代码的输出结果是: -84 4294967264 分析: xiaoqiang@dev:~/cpp$ g++ -g c212.cc -o temp xiaoqiang@de ...
- char, signed char, and unsigned char in C++
关于这三者的区别stackoverrflow里有一个答案是这样说的: 3.9.1 Fundamental types [basic.fundamental] 1 Objects declared as ...
- 无符号整型 unsigned int、unsigned long、usigned long long、size_t 比较和格式控制
位数比较 由于数据的长度和平台相关,所以基于 64 位系统比较. Windows Linux unsigned int 32 bits/4294967295 32 bits unsigned long ...
随机推荐
- org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver class not found
今天在使用hibernate搭建开发环境的时候出现了一个不可思议的问题: org.hibernate.service.classloading.spi.ClassLoadingException: S ...
- linux进程管理之服务
init进程首先通过initable查看运行级别,然后运行rc.d下面的sysinit,然后调用rc,然后运行rc###连接到init.d下面的服务.自启动. chkconfig命令只是查看和设置服 ...
- WPF Loader
xaml <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml ...
- Socket 阻塞模式和非阻塞模式
阻塞I/O模型: 简介:进程会一直阻塞,直到数据拷贝 完成 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返 ...
- uva 10128
动归 转移方程 :dp(i, j, k) = dp(i – 1, j, k) * (i – 2) + dp(i – 1, j – 1, k) + dp(i – 1, j, k – 1) i表示此时排第 ...
- 在javascript中检查一个值是否为integer
integer 类型在javascript中很奇怪.ECMAScript技术规格说明书中,它是以概念的形式存在.number类型包括浮点型(floating )和整形(integer )不包括小数(详 ...
- 无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型
this.BeginInvoke(() => { this.btnQuery.Enabled = false; //禁用查询 }); 跨线程调用时,编译上面的代码将提示 对于Control.In ...
- leetcode Largest Rectangle in Histogram 解法二
上一篇文章讲了该题的一个解法.后来又发现一个更好的解法. 首先依旧考虑一个升序的数列,例如1,2,3,4,5.那么它的最大矩形显然是有5种可能,即 1*5,2*4,3*3,4*2,1*5.所以最大的矩 ...
- POJ 2080 Calendar(很水的模拟)
刚开始一直WA,才发现原来代码中两处减去年份.月份的天数的判断条件用的是>=,虽然最后考虑n=0要退回一天的情况,但还是WA.后来改成>的条件判断,省去了考虑n=0的麻烦,AC. 此题无非 ...
- mac 下周期调度命令或脚本
crontab 是在linux服务器上部署定时任务的方法 0 5 * * * /usr/bin/python /data/www/tools/mysql_backup.py cmd之前有5个项目要填, ...