- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法理解以下迈克的 C 书中摘录中的行“移位的结果与移位的结果具有相同的类型(在积分提升之后)”巴纳汉(Section 2.8.2.3) 。
Importantly, the rules involving mixed types of operands do not apply to the shift operators. The result of the shift has the same type as the thing that got shifted (after the integral promotions), and depends on nothing else.
如果某些东西已经被提升为整数(根据移位运算符使用期间的要求),那么如何将其转换回与原来相同的类型,当然除非它位于赋值的右侧并且是被分配给与整数提升之前相同类型的变量?此外,“涉及混合类型操作数的规则不适用于移位运算符”这句话到底意味着什么?
请阐明问题的两个部分。谢谢。
以下是书中的屏幕截图,分别与使用按位运算符和一般混合表达式期间的提升有关。
最佳答案
这非常简单;移位运算结果的类型是 LHS 操作数的类型。对于大多数二元运算符,结果基于 LHS 和 RHS 操作数,但移位运算符不同。
unsigned char uc = 0x08;
unsigned short us = 0x0008;
unsigned int ui = 0x00000008;
unsigned long long ul = 0x0000000000000008;
(我假设这个答案是 sizeof(unsigned int) == 4
。如果不同,细节就必须改变,但概念保持不变。)
现在考虑一些表达式:
uc + uc;
两种类型都转换为 int
结果是int
.
us + us;
同样,两种类型都转换为 int
结果是int
.
us + ui;
ui + us;
us
中的值转换为unsigned int
结果是unsigned int
(请注意,以前的值已转换为 signed int
又名 int
)。
ui + ul;
ul + ui;
这两个表达式都转换 ui
到unsigned long long
结果是unsigned long long
。请注意,这些表达式是对称的;结果的类型(实际上,对于 +
运算符,结果的值)并不取决于哪个值位于运算符的左侧,哪个值位于运算符的右侧。
普通操作就到此为止;现在轮类怎么样?
uc << uc;
LHS 转换为 int
通过通常的算术转换,结果是 int
.
us << us;
这个结果也是 int
.
ui << ui;
此结果是 unsigned int
.
ul << ul;
此结果是 unsigned long long
。但是混合类型怎么样?
uc << ul; // Result: int
ul << uc; // Result: unsigned long long
us << ui; // Result: int
ui << us; // Result: unsigned int
ui << ul; // Result: unsigned int
ul << ui; // Result: unsigned long long
LHS 操作数的提升类型控制结果的类型。对于短于 int
的类型,结果是int
;对于其他类型,类型是 LHS 操作数的类型。
这就是你引用的全部意思。
关于你能解释一下这个—"the rules involving mixed types of operands do not apply to the shift operators",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962388/
假设a是张量,那么有什么区别: 类型(a) a.类型 a.type() 我找不到区分这些的文档。 最佳答案 type 是 python 内置方法。 它将返回对象的类型。喜欢 torch.Tensor.
什么是 Type 1 的居民的例子?两者都不是 Type也不是Type的居民?在 Idris REPL 中进行探索时,我无法想出任何东西。 更准确地说,我正在寻找一些 x除了 Type产生以下结果:
我找到了一些资源,但我不确定我是否理解。 我找到的一些资源是: http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb2ff3358411d1829f00
这两个函数原型(prototype)有什么区别? void apply1(double(f)(double)); void apply2(double(*f)(double)); 如果目标是将提供的函
http://play.golang.org/p/icQO_bAZNE 我正在练习使用堆进行排序,但是 prog.go:85: type bucket is not an expression
假设有一个泛型定义的方法信息对象,即一个方法信息对象,这样的方法Info.IsGenericMethodDefinition==TRUE:。也可以说它们也有一个泛型参数列表:。我可以使用以下命令获取该
在具有依赖类型的语言中,您可以使用 Type-in-Type 来简化语言并赋予它很多功能。这使得语言在逻辑上不一致,但如果您只对编程感兴趣而不对定理证明感兴趣,这可能不是问题。 在 Cayenne
根据 Nim 手册,变量类型是“静态类型”,而变量在内存中指向的实际值是“动态类型”。 它们怎么可能是不同的类型?我认为将错误的类型分配给变量将是一个错误。 最佳答案 import typetrait
假设您有以下结构和协议(protocol): struct Ticket { var items: [TicketItem] = [] } struct TicketItem { } prot
我正在处理一个 EF 问题,我发现它很难调试...以前,在我的系统中有一个表类型继承设置管理不同的用户类型 - 所有用户共有的一种根类型,以及大致基于使用该帐户的人员类型的几种不同的子类型。现在,我遇
这是我的 DBManager.swift import RealmSwift class DBManager { class func getAllDogs() -> [Dog] {
我正在尝试使用傅里叶校正图像中的曝光。这是我面临的错误 5 padded = np.log(padded + 1) #so we never have log of 0 6 g
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
请考虑以下设置: protocol MyProcotol { } class MyModel: MyProcotol { } enum Result { case success(value:
好吧,我将我的 python 项目编译成一个可执行文件,它在我的电脑上运行,但我将它发送给几个 friend 进行测试,他们都遇到了这个错误。我以前从未见过这样的错误。我使用 Nuitka 来编译代码
当我尝试训练我的模型时"ValueError: Type must be a sub-type of ndarray type"出现在 line x_norm=(np.power(x,2)).sum(
我尝试在另一个类中打断、计数然后加入对象。所以我构建协议(protocol): typealias DataBreaker = () -> [Double] typealias DataJoiner
我正在使用 VS 2015 更新 3、Angular 2.1.2、Typescript 2.0.6 有人可以澄清什么是 typings 与 npm @types 以及本月很难找到的任何其他文档吗? 或
我正在考虑从 VS2010 更改为 Mono,因此我通过 MoMA 运行我的程序集,看看我在转换过程中可能遇到多少困难。在生成的报告中,我发现我不断收到此错误: bool Type.op_Equali
主要问题 不太确定这是否可能,但由于我讨厌 Typescript 并且它使我的编码变得困难,我想我会问只是为了确定。 interface ISomeInterface { handler: ()
我是一名优秀的程序员,十分优秀!