首页 > printf(%d, -10u); 这个输出什么呀, 0或1?

printf(%d, -10u); 这个输出什么呀, 0或1?

                                         printf("%d", -1<0u); 这个输出什么呀, 0或1?

                                                            周银辉 

 

既然我这么问了, 那么答案自然不是1,而是0

看看下面的代码:

 

对于-1+0u输出为-1,似乎理所当然,但为什么-1<0u却输出0呢,也就是说-1不小于0u,好神奇啊

一个解释是:“当执行一个运算时, 如果它的一个运算数是有符号的而另一个是无符号的,那么C会隐含地将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算” (来自《深入理解计算机系统(修订版)49页》),-1的有符号表示为1111....1111(N个1,N取决于位宽,我们假设32个吧),如果强制解释为无符号数,那么就是2^32: 4294967296 ,当然比0大咯,所以输出0(false)

当,我晕,在执行-1+0u运算时,C似乎又不愿意采用这种方式了,而是(我猜的)将0u采用“零扩展”的方式向上转型为有符号数的0,那么-1+0,就自然得到-1了

这两种解释似乎是矛盾的, 我很奇怪在运算-1<0u时为啥不用“零扩展”向上转型,而输出1呢,我们也希望得到1,对吧~

 

 

转载于:https://www.cnblogs.com/zhouyinhui/archive/2010/06/17/1759396.html

更多相关:

  • 全卷积网络(FCN) 1.全卷积神经网络介绍 FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的fea...

  • printf()函数优点在于可以格式化输出 格式:   %['padding_character][-][width][.precision]type   所有的转换说明都是以%开始,如果想打印一个%符号,必须用%% ;   参数“'padding_character”是可选,它将被用来填充变量直至所指定的宽度,该参...

  • 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。 输入格式: 输入在一行中给出一个长度不超过10000的、仅...

  • 给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。 输入样例:...

  • python面试题目 原文地址:https://www.usblog.cc/blog/post/justzhl/b5cc9a05c7d2 问题一:以下的代码的输出将是什么? 说出你的答案并解释。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Parent(object):     x...

  • 1.逻辑运算符 逻辑运算符,它是用于布尔值进行运算的,运算的最终结果为布尔值true或false。 运算符 运算规则 范例 结果 & 与 false&true False | 或 false|true True ^ 异或 true^flase True ! 非 !true Flase &&...

  • 1、算数运算: 2、比较运算 3、赋值运算 4、逻辑运算 5、成员运算: 6、身份运算: 7、位运算:  8、运算符优先级:       转载于:https://www.cnblogs.com/chhphjcpy/p/6064572.html...