我想知道什么时候应该投出更好.在添加,乘法等时,C++中的隐式类型转换规则是什么.例如,
int + float = ?
int * float = ?
float * int = ?
int / float = ?
float / int = ?
int / int = ?
int ^ float = ?
Run Code Online (Sandbox Code Playgroud)
等等...
表达式是否总是被评估为更精确的类型?Java的规则有所不同吗?如果我不准确地说出这个问题,请纠正我.
数学:
如果你有这样的等式:
x = 3 mod 7
Run Code Online (Sandbox Code Playgroud)
x可以是...... -4,3,10,17 ......,或更一般地:
x = 3 + k * 7
Run Code Online (Sandbox Code Playgroud)
其中k可以是任何整数.我不知道为数学定义了模运算,但因子环肯定是.
Python:
在Python中,当您使用%正数时,您将始终获得非负值m:
#!/usr/bin/python
# -*- coding: utf-8 -*-
m = 7
for i in xrange(-8, 10 + 1):
print(i % 7)
Run Code Online (Sandbox Code Playgroud)
结果是:
6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3
Run Code Online (Sandbox Code Playgroud)
C++:
#include <iostream>
using namespace std;
int main(){
int m = 7;
for(int i=-8; i …Run Code Online (Sandbox Code Playgroud) C和C++标准规定,在相同等级的有符号和无符号整数之间的二进制运算中,有符号整数被转换为无符号整数.由此引起的SO有很多问题......让我们称它为奇怪的行为:无符号转换为签名转换,C++隐式转换(有符号+无符号),警告 - 有符号和无符号整数表达式之间的比较,%(mod)与混合符号等
但是这些都没有给出任何理由,为什么标准是这样的,而不是倾向于签署的注册.我确实找到了一位自封的大师,他说这是明显正确的做法,但他也没有给出推理:http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on- signed-and-unsigned-integers /.
查看我自己的代码,无论我将有符号和无符号整数组合在一起,我总是需要从unsigned转换为signed.有些地方没关系,但我没有找到一个代码示例,将有符号整数转换为unsigned是有意义的.
什么情况下铸造到无符号的正确的事情呢?为什么标准是这样的?