无符号数和有符号数的转化

下面的代码输出是什么,为什么?voidfoo(void){unsignedinta=6;intb=-20;(a+b>6)?puts(">6"):puts("<=6");结... 下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? puts("> 6") : puts("<= 6");
结果是多少?
int b是unsingned int 还是signed int (我认为默认情况应该是无符号数)
}
展开
 我来答
liuleoll
2018-08-30 · TA获得超过9659个赞
知道答主
回答量:25
采纳率:0%
帮助的人:6908
展开全部

语言有符号数与无符号数之间的转换:

无符号数:不存在正负之分,所有位都用来表示数的本身。

有符号数:最高位用来表示数的正负,最高位为1则表示负数,最高位为0则表示正数。

1. 无符号数转换为有符号数:看无符号数的最高位是否为1,如果不为1(即为0),则有符号数就直接等于无符号数;

2.如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。

3..有符号数转换为无符号数 :看有符号数的最高位是否为1,如果不为1(即为0),则无符号数就直接等于有符号数;

4.如果有符号数的最高位为1,则将有符号数取补码,得到的数就是无符号数。

拓展资料:

1.有符号数是针对二进制来讲的。用最高位作为符号位,“0”代表“+”,“1”代表“-” ;其余数位用作数值位,代表数值。

2.有符号数的表示:计算机中的数据用二进制表示,数的符号也只能用0/1表示。一般用最高有效位(MSB)来表示数的符号,正数用0表示,负数用1表示。

3.有符号数的编码方式,常用的是补码,另外还有原码和反码等。用不同二进制编码方式表示有符号数时,所得到的机器数可能不一样,但是真值是相同的。

参考资料:百度百科_有符号数

zubyzuby
2008-04-16 · TA获得超过1539个赞
知道小有建树答主
回答量:1118
采纳率:100%
帮助的人:1222万
展开全部
LZ要仔细看书
int就是有符号的
unsigned int才是无符号的

数据类型转换的原则及注意问题

一、两条自动转换原则和一条强制性转换原则。

设:x为短整型(2B),y单精度型(4B),z为字符型(1B)。

1、表达式计算中数据类型的自动转换原则
参加运算的各个数据都转换成长度最长的数据类型。结果为数据长度最长的数据类型。例如:
① x+y x先自动转换成单精度型,后计算x+y,结果为单精度型;
② x+z z先自动转换成短整型,后计算x+z,结果为短整型。

2、把运算结果赋给变量时数据类型的自动转换原则
先将运算结果的数据类型自动转换成变量的数据类型,然后赋给变量。例如:
① y=x+z x+z运算结果为短整型,自动转换成单精度型,再赋给变量 y.
② x=y+z y+z运算结果为单精度型,自动转换成短整型,再赋给变量 x.

3、运算结果的强制性数据类型转换原则
强制性数据类型转换格式:(数据类型符)(表达式)
先按自动转换原则计算表达式的值,后将其转换成指定的数据类型。
仅当表达式是单个常量或变量时,表达式括号可省略。例如:
①(float)x 对 x 的值强制转换成单精度;
②(float)x+m 先对 x 的值强制转换成单精度,后再和 m 进行加运算;
③(float)(x+m) 先计算(x+m),后把(x+m)的值强制转换成单精度。

二、类型转换的注意问题

1、表达式的类型转换是临时的,式中的常量或变量的原类型均不改变。

2、把运算结果赋给变量时,若运算结果的数据长度 > 变量的数据长度,会截去超长部分,
将可能导致精度降低或产生不确定的值。

3、类型转换占用系统时间,过多的转换会降低程序运行效率。除必要的外,应选择合适的数据类型。

main()
{
char a;
int x;
x=32767; /* x 的机内码 01111111 11111111 */
a=x; /* a 的机内码(p31) 11111111 */

printf("a=%3d x=%d\n",a,x); /* a 的原码 10000001 = -1 */
/* x 的原码 01111111 11111111 = 32767 */

a=x>>8; /* a 的原码 01111111 = 127 */
printf("a=%3d x=%d\n",a,x); /* x 的原码 01111111 11111111 = 32767 */
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
redia_crystal
2008-04-16 · TA获得超过462个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:0
展开全部
unsingned int 优先级高
计算a+b会转化为unsingned int

输出是>6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙里波特
2020-02-10 · TA获得超过5251个赞
知道大有可为答主
回答量:1.1万
采纳率:95%
帮助的人:646万
展开全部
无符号数和有符号数的转化?
同样字长的无符号数、有符号数,两者表示范围不一样。

转换之后,还能相等吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jssqnju
2015-09-19 · TA获得超过18万个赞
知道顶级答主
回答量:9.2万
采纳率:86%
帮助的人:2.3亿
展开全部
语言有符号数与无符号数之间的转换:

无符号数:不存在正负之分,所有位都用来表示数的本身。
有符号数:最高位用来表示数的正负,最高位为1则表示负数,最高位为0则表示正数。

1 无符号数转换为有符号数
看无符号数的最高位是否为1,如果不为1(即为0),则有符号数就直接等于无符号数;如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。

2 有符号数转换为无符号数
看有符号数的最高位是否为1,如果不为1(即为0),则无符号数就直接等于有符号数;如果有符号数的最高位为1,则将有符号数取补码,得到的数就是无符号数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式