在python中,a+=a-=a的值是多少?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中,a+=a-=a的值是多少?相关的知识,希望对你有一定的参考价值。
参考技术Aa=-12。
按照从左至右结合性和优先级顺序,先计算a-=a*a,最后a结果为a=a-a*a,a=3-3*3=-6;
再计算a+=-6,因为此时a的值已经变成了-6,所以计算过程是a=a+(-6)=-6-6=-12。
或:
a+=a-=a*a;
复合赋值表达式,从右到左运行,可以分拆成:
a-=a*a;
a+=a;
a的原值为3
a-=a*a;
相当于
a=a-a*a=3-3*3=-6;
再运行
a+=a;
自然就成了-12
扩展资料:
任务的优先级等级与相对截止期、空闲时间之间的层次关系可以用一种线性关系来描述,比如,
di+ksj=g
其中,k为线性关系的斜率,g 可以看成是优先级等级。对于确定的斜率k,g 越小,优先级等级越高。比如,对于g1<g2,满足di+ksj=g1的任务优先级要高于满足di+ksj=g2的任务优先级。图中带箭头的斜向上直线表示一种不同等级的排序,越往左上,等级越高。
参考资料来源:百度百科-优先级
这段代码中变量 a 和 b 的值是多少?
【中文标题】这段代码中变量 a 和 b 的值是多少?【英文标题】:What are the values of the variables a and b in this code? 【发布时间】:2020-10-16 10:11:40 【问题描述】:#include<iostream>
struct Vector2
int x, y;
;
struct Vector4
public:
union
struct
int x, y, z, w;
;
struct
Vector2 a, b;
;
;
;
void PrintVector(const Vector2& vector)
std::cout << vector.x << ", " << vector.y << std::endl;
int main()
Vector4 vector4 = 1,2,3,4 ;
vector4.x = 50;
PrintVector(vector4.a);
std::cin.get();
在这段代码中,为什么a有x和y的值,而b有z和w的值?和联通有关系吗? 如果你知道,请告诉我。 谢谢
【问题讨论】:
【参考方案1】:初始化 1,2,3,4
使union
中的第一个struct
成为活动成员。
vector4.x = 1;
语句有效,因为您正在操作活动成员的元素。
读取vector4.a
的行为未定义,因为union
中的第二个struct
不是活动成员。
在 C++ 中通常不允许通过 union
进行类型双关语。换句话说,a
和 b
没有值。
【讨论】:
...虽然这个技巧并不罕见,并且至少在过去在一个或另一个编译器中似乎有效。我相信它的目的是提供类似swizzling in GLSL 的东西。有时,在 C++ 中禁止类型双关确实很伤人。 ;-) PrintVector(vector4.a); vector4.a 什么都不做,PrintVector() 函数忽略vector4.a 并执行函数的内容? @SeungYup26 未定义行为意味着它没有定义(关于语言标准)PrintVector()
实际上做了什么。充其量,它可能会打印一个 Vector2,其内容为 vector4.x
和 vector4.y
。它也可以打印任何东西或只是崩溃。【参考方案2】:
从技术上讲,这是未定义的行为,但大多数编译器都会支持它 (Source):
从最近未写入的联合成员中读取是未定义的行为。许多编译器作为非标准语言扩展实现了读取联合的非活动成员的能力。
这是一个简单的例子,说明了相同的概念,没有额外的结构:
union ExampleUnion
int a;
int b;
;
int main()
ExampleUnion e;
e.a = 1;
// This will print 1, since b occupies the same memory as a.
std::cout << e.b << std::endl;
之所以有效,是因为联合的大小是最大成员的最大大小(而不是成员大小的总和)。这意味着成员共享相同的内存,所以如果你写一个,你就可以从另一个读取。
【讨论】:
以上是关于在python中,a+=a-=a的值是多少?的主要内容,如果未能解决你的问题,请参考以下文章
a=5; 之后 a 的值是多少?一个=一个++; Syso(a); [重复]