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的更多相关文章

  1. c语言中的unsigned 和 signed

    我们来一起看下,C语言中,对于Integer Type(整数形式)的unsigned与signed两种形式的区别,以及在内存中的存储方式是如何的 Integer type(整数形式)是C语言中的基本数 ...

  2. 【转】mysql 中int类型字段unsigned和signed的区别

    转自https://www.cnblogs.com/wangzhongqiu/p/6424827.html 用法: mysql> CREATE TABLE t ( a INT UNSIGNED, ...

  3. C++ char, unsigned char, signed char

    C语言中的 char, unsigned char, signed char 一.他们是什么? signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8 ...

  4. mysql 中int类型字段unsigned和signed的探索

    转自:http://www.0791quanquan.com/news_keji/topic_816453/ 探索一:正负数问题 拿tinyint字段来举例,unsigned后,字段的取值范围是0-2 ...

  5. C语言的补码表示和unsigned及signed的转换

    这东西实际编程时一直无视的,范围小了就换个大点的表示形式,但是总觉得基础知识还是掌握得好,免得到时候用移位运算或类型转换或笔试题时要花时间想. C语言的基本类型有char.int.float.doub ...

  6. unsigned和signed

    int分为unsigned(无正负号)和signed(有正负号) 一般int默认为signed unsigned和unsigned int意思相同

  7. 一段代码的疑问(1)——unsigned与signed

    现象: 先来看一段代码: 这段代码的输出结果是: -84 4294967264 分析: xiaoqiang@dev:~/cpp$ g++ -g c212.cc -o temp xiaoqiang@de ...

  8. char, signed char, and unsigned char in C++

    关于这三者的区别stackoverrflow里有一个答案是这样说的: 3.9.1 Fundamental types [basic.fundamental] 1 Objects declared as ...

  9. 无符号整型 unsigned int、unsigned long、usigned long long、size_t 比较和格式控制

    位数比较 由于数据的长度和平台相关,所以基于 64 位系统比较. Windows Linux unsigned int 32 bits/4294967295 32 bits unsigned long ...

随机推荐

  1. HDU 2821 Pusher

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2821 首先,题目描述给的链接游戏很好玩,建议先玩几关,后面越玩越难,我索性把这道题A了,也就相当于通关 ...

  2. NYOJ-36 最长公共子序列 AC 分类: NYOJ 2014-01-03 20:54 155人阅读 评论(0) 收藏

    #include<stdio.h> #include<string.h> #define N 1010 #define max(x,y) x>y?x:y int dp() ...

  3. 在javascript中检查一个值是否为integer

    integer 类型在javascript中很奇怪.ECMAScript技术规格说明书中,它是以概念的形式存在.number类型包括浮点型(floating )和整形(integer )不包括小数(详 ...

  4. Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json

    原文:http://www.cnblogs.com/chsword/archive/2008/09/19/Newtonsoft_new_3_0.html http://www.cnblogs.com/ ...

  5. rsync 文件校验及同步原理及rsync server配置

    参考:http://rsync.samba.org/how-rsync-works.html 我们关注的是其发送与接收校验文件的算法,这里附上原文和我老婆(^_^)的翻译: The Sender Th ...

  6. What is the difference between Views and Materialized Views in Oracle?

    aterialized views are disk based and update periodically base upon the query definition. Views are v ...

  7. Chp5: Bit Manipulation

    Bits Facts and Tricks x ^ 0s =  x x & 0s =  0 x | 0s = x x ^ 1s = ~x x & 1s = x x | 1s = 1s ...

  8. POJ 1988 Cube Stacking(带权并查集)

    哈哈,一次AC. 题意:给你 1-n 编号的立方体,然后移动包含指定编号的立方体的堆移到另一个堆上边, 询问指定的编号立方体下面有多少个立方体. 思路:由于并查集是存储的是它的父亲,那么只能从父亲那里 ...

  9. git的学习网站

    git官网:http://git-scm.com/ http://gitref.org/index.html http://edu.51cto.com/lesson/id-33751.html     ...

  10. 用ISO C++实现自己的信号槽(Qt另类学习)

    qtc++objectsignalclassstring   目录(?)[-] Qt信号与槽 引入元对象系统 建立信号槽链接 信号的激活 槽的调用 全家福 零零散散写在后面 Q_OBJECT Conn ...