K&R第二章难度

如何解决K&R第二章难度

| 我是一名学生,正在阅读kerningham和ritchie所著的c书。 书中的一行说“ 0”小于“ 1”,因为在这种情况下,“ 2”被提升为带符号的“ 3”。但是
-1l > 1ul
是因为在这种情况下
-1l
被提升为无符号
long
。 我无法真正理解促销活动。
-1l
升为无符号长整数的值是多少?如果有人可以帮助,那就太好了。 谢谢。     

解决方法

        在学习C时,如果有问题,只需编写一个简单的程序即可:
#include <stdio.h>
main() {
  int si = -1;
  unsigned int ui = 1;
  if ( si > ui ) printf(\"-1l > 1u\\n\");
  else           printf(\"-1l <= 1u\\n\");
}
您会看到输出显示ѭ9。 因为
si
ui
都具有相同的等级(它们都是
int
s),所以规则说负值将在设置为
UINT_MAX
时提升为无符号,这是可能的最大无符号值。     ,        隐式提升是C语言中最困难的事情之一。如果您有一个C代码表达式,看起来像 如果(-1l> 1ul) 那么就不会进行“整数促销”。两种类型的大小相同,但签名不同。然后,-1l将被转换为具有很大值的unsigned long。这是“常规算术转换”中的规则之一。     ,        这实际上是一次转换。促销活动从排名低于整数的类型到整数。 C语言中整数转换的规则有些复杂。根据ISO C99§6.3.1.8¶1,它们是:   否则,整数促销是   在两个操作数上执行。然后   以下规则适用于   提升的操作数:      如果两个操作数具有相同的类型,则不会进行进一步的转换   需要。      否则,如果两个操作数都具有符号整数类型或都具有   未签名         整数类型,具有较小整数转换类型的操作数   排名是         转换为具有更高等级的操作数的类型。      否则,如果具有无符号整数类型的操作数具有等级   大于或         等于另一个操作数类型的等级,然后是操作数   与         有符号整数类型将转换为   未签名         整数类型。      否则,如果带符号整数类型的操作数的类型可以   代表         具有无符号整数的操作数类型的所有值   然后输入         无符号整数类型的操作数将转换为该类型   的         带符号整数类型的操作数。      否则,两个操作数都将转换为无符号整数类型         对应于带符号整数类型的操作数的类型。 我将尝试解释它们: 尝试转换为较大的类型。当
signed
unsigned
之间存在冲突时,如果较大的(包括两种类型具有相同等级的情况)类型为
unsigned
,则选择
unsigned
。否则,仅当
signed
可以表示两种类型的所有值时,才使用。     ,        在
-1l > 1ul
中,ѭ0升为
unsigned long
,根据定义和标准,-1强制转换为
unsigned
类型将是该that15ѭ类型可表示的较大值。 我从这里对一个相当相关问题的答案的记忆中得到了启发。 在查看了C99草案之后,我到处徘徊了,例如参见6.3.1.3(2),其中说该类型可表示的最大值将与原始值相加或相减,直到适合新类型为止。我必须警告您,尽管
char
是一个整数类型,但还是要特殊对待:: 24 implementation是带符号或无符号的,它是实现定义的。但是,严格来说,这只是眼前的问题。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?