C语言中unsigned和signed数据的转换

作者&投稿:荆疤 (若有异议请与网页底部的电邮联系)
C语言中unsigned和signed在声明时有什么作用~

1、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。
2、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据。

扩展资料:
unsigned和signed的区别
1、所有比int型小的数据类型(包括char,signed char,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型
2、bool型转化为int型时,false转化为0,true转换为1;反过来所有的整数类型转化为bool时,0转化为false,其它非零值都转为true
3、如果表达式中混有unsigned short和int型时,如果int型数据可以表示所有的unsigned short型的话,则将unsigned short类型的数据转换为int型,否则,unsigned short类型及int型都转换为unsigned int类型
举个例子,在32位机上int是32位,范围–2,147,483,648 to 2,147,483,647,unsigned short是16位,范围0 to 65,535,这样int型的足够表示unsigned short类型的数据,因此在混有这两者的运算中,unsigned short类型数据被转换为int型
4、unsigned int 与long类型的转换规律同3,在32位机上,unsigned int是32位,范围0 to 4,294,967,295,long是32位,范围–2,147,483,648 to 2,147,483,647,可见long类型不够表示所有的unsigned int型,因此在混有unsigned int及long的表达式中,两者都被转换为unsigned long
5、如果表达式中既有int 又有unsigned int,则所有的int数据都被转化为unsigned int类型

1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数。
2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负。
3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用来存储符号,这一位不能表示数值。一般来说,同类型的signed能够存储的数的绝对值大小要小于undigned。
4、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。
5、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。

扩展资料:signed 和unsigned的联系:
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。
无符号版本和有符号版本的区别就是有符号类型需要使用一个bit来表示数字的正负,比如16位系统中一个int能存储的数据的范围为–32768 ~ 32767(16位2进制的最高位作为符号位‘1’为负‘0’为正),而unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)。由于在计算机中,整数是以补码形式存放的。
参考资料:百度百科-signed

先讲一下 原码 补码 反码的 概念
正整数的 原码 补码 反码 都是一样的

负数的反码是将其原码除 符号位之外的各位取反
负数的补码是将其原码除 符号位之外的各位取反 再在末尾加1

假设 存在 一个字节的整型 signed int8 x = -5
x的原码1000 0101(最高位是符号位 1表示负 0表示正)
x的反码1111 1010
x的补码1111 1011

储存的计算中的 -5 不是我们更能理解的10000101,而是 -5 的补码1111 1011

现在 回答你的问题:
unsigned int e,f=12345;
f是无符号 所以 f的 原码 补码是一样的:0000 0100 1101 0011
因此c还是等于12345

signed int c,d=-15;
d是负数 所以 d的原码是1000 0000 0000 1111
d的补码是1111 1111 1111 0001

c = f = 0000 0100 1101 0011 转换成 十进制 就是 12345
e = d = 1111 1111 1111 0001 因为e是无符号整型 所以计算机直接将
1111 1111 1111 0001 当做正整数来处理的,没有了补码转换成原码的过程了。
因此你看到的e不是等于 -15 (用十进制表示)而是 65521(用十进制表示)

总结:这个问题的关键是 我们在计算机屏幕上看到的是 原码;而储存的计算中的是 补码。正整数的原码 补码是一样的,而负数的原码 补码是 不一样的,
如果你了解这个概念的话,这个问题就很容易理解了

你赋予c=f;e=d,f=12345,不用说了吧
16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。
而你的d=-15,也就是说65535-15=65521


C语言中如何输出长整型数值
在C\/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。本文...

汇编语言笔记(五)——流程控制
示例:一个简单的汇编程序,实现质数打印主要过程分解为prime函数,用于判断无符号数是否为质数,以及unsign2str函数,将整数转换为字符串。main_loop: cmp rax, 0 jz main_loop call unsign2str lea rdx, [string] mov r9, [temp] mov r8, rax mov rcx, [StdHandle] ...

汇编语言中的加减法~~~困扰我很久了。。有高人吗
这个问题要是考虑深了,还真有些东西呢,当然,要是简单的理解,那就很容易了。下面我就把这个东西尽量的扩展一点,深入一点和大家说说。一、只有一个标准!在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,...

C语言里a是一个无符号整形变量,语句a=a>15是什么意思?有什么作用?_百度...
1、a=a>15 ,这条语句首先执行的是,如果成立,则比较的结果就是非零值1,然后将1赋值给a(即a=1),如果a > 15不成立,则比较的结果就是0,,然后将0的值赋给a(即a=0);2、所以a的值不是1,就是0。因为你只给了一条语句,题目描述也不清楚,基本上是不能知道这条语句在整个程序中...

计算机c语言中 typedef struct {int num; }STYPE; 什么意思
是取别名的意思,之后可以用STYPE直接定义结构体,例如:STYPE test;test.num = 100;再比如:typedef unsigned short ushort;那么可以直接用ushort 来定义变量,如ushort val;和unsign short val等价。取别名也就是简化定义变量时的输入量,如unsigned short简化成了 ushort(当然还可以更短字符的)。

c语言问题
8、C语言中,若对变量存储类型无说明,则变量的默认类型是【 】A)static B)register C)auto D)unsign 9、分析以下程序结果【 】。double c=12345678.1234567;printf("%8.4lf\\n",c);A)12345678.1234567 B) 12345678.1235 C) 12345678.1234 D) 12345678 10、以下不正确的C语言标识...

一个简单的C语言赋值转换问题
这个取决于你用的是多少位的编译器,也就是取决于数据类型所占的字节数 我用的是VC,结果就是:4294967295 代码:include<stdio.h> include<string.h> int main(){ int a=-1;unsigned int b;b=a;printf("b = %u",b);return 0;} 因为VC是32位的,所以unsignde占4个字节,所以输出...

c语言 一个高难度问题!
定义方法:typedef strcut stBit_t { unsigned char bit0 :1;unsigned char bit1 :1;unsignde char bit2 :1;...128个 };解释一下,typedef一般可以加也可以不加,加的话,我们用这个结构体定义对象的话,就不用再加struct。(只在C语言中)内部首先 unsigned char是用来告诉我们我们所定义的位...

在C语言中,unsigned int a=65535 ; ………;printf("a=%d",a); 为什么...
a的类型是不带不符号,也就是说有一个变量为a的box中装入了一个数据,而printf中的%d又将a作为带符号数显示,在其他未明确指出时,a显示是一个不带符号数,而你使用了%d要求将a作为带符号数显示,那么显然显示的结果是-1,也就是说,如果a=95,printf("a=%c",a);则会显示成字符a呢!

C语言中如何定义一个从1~7的随机数。
srand( (unsigned)time( NULL ) );\/\/初始化随机数 \/* 打印10个随机数. *\/ for( i = 0; i < 10;i++ )printf( " %d\\n", rand() );} 在C语言中,是如何取得这个随机数的?一个语句:rand();它的作用就是随机取0到RAND_MAX之间的任何数。ANSI标准指出,RAND_MAX值的范围到少是...

塔什库尔干塔吉克自治县17139771992: c语言中signed 和unsigned是什么意思 -
保榕严辞: 1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数. 2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负. 3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用...

塔什库尔干塔吉克自治县17139771992: C语言中unsigned和signed在声明时有什么作用? -
保榕严辞: signed和unsigned用于修饰整数类型(包括char,从ANSI C89标准开始支持). signed表示有符号,unsigned表示无符号.对应的有符号数的最大取值要比无符号的小约一半,因为最高一位被用来表示符号. 默认的int、short、long、long long...

塔什库尔干塔吉克自治县17139771992: C语言中unsigned和signed数据的转换 -
保榕严辞: 先讲一下 原码 补码 反码的 概念 正整数的 原码 补码 反码 都是一样的负数的反码是将其原码除 符号位之外的各位取反 负数的补码是将其原码除 符号位之外的各位取反 再在末尾加1假设 存在 一个字节的整型 signed int8 x = -5 x的原码1000 ...

塔什库尔干塔吉克自治县17139771992: c语言变量分为signed 和unsigned 两种,这里有符号和没符号 区别在哪里? 举个例子说下. -
保榕严辞: char的范围是-128到127 unsigned char的范围是0到255

塔什库尔干塔吉克自治县17139771992: c语言中signed变量和unsigned有区别吗 singed的没也符号的吗,变量signed和unsigned不都是没符号的吗,如果想让输出的数值有符号应该怎么运用unsigned变量啊 -
保榕严辞: signed和unsigned有区别,前者是有符号的变量,后者是无符号的变量.以8位整型为例,signed的表示范围是-128至127,unsigned的表示范围是0至255.你最后提的问题,本身存在一定的误解.数值是否有符号,和你最初的定义和最后的使用有关.这不是运用unsigned的问题.如果希望让输出的数值有符号,以整型为例,在格式化输出的时候就需要用%d,对于无符号数就需要用%u.

塔什库尔干塔吉克自治县17139771992: C语言中,signed long类型的与unsigned long类型的有什么区别? -
保榕严辞: 能表示的数值区间不同 signed long能表示[-2^31, 2^31-1]之间的整数 unsigned long能表示[0, 2^32-1]之间的整数

塔什库尔干塔吉克自治县17139771992: C语言中的定义整型变量时前面的unsigned是什么意思啊 -
保榕严辞: 无符号,比如:int a,那么取值范围可以为负;如果是unsigned int a,那么就是只可能为0以上的整数,包括0.

塔什库尔干塔吉克自治县17139771992: c语言unsigned -
保榕严辞: 比较简单的区别就是,如果你使用的是char类型时,不需要unsigned;如果你是用的int 类型,并且一定不会用到负数,这时用unsigned做修饰可以防止出错.

塔什库尔干塔吉克自治县17139771992: 在C语言中,unsigned char是什么类型? -
保榕严辞: unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型.整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号...

塔什库尔干塔吉克自治县17139771992: signed和unsigned在C语言中怎么样用,还有算术模2n定律是什么 -
保榕严辞: 用在声明变量的时候作为修饰 例如我要声明一个无符号的整型变量:unsigned int a; 普通的整型变量默认为有符号的,范围在-2147483648~2147483647 有符号的整型变量的范围在0~4294967295

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网