代码片段#1。
int n = 46341;
long long value = ((long long) (n * (n + 1))) / 2;
std::cout << value; // -1073716337 -- WRONG!
Run Code Online (Sandbox Code Playgroud)
代码片段#2。
int n = 46341;
long long value = (long long)((long long)((long long)n * ((long long)n + 1))) / 2;
std::cout << value; // 1073767311 -- CORRECT!
Run Code Online (Sandbox Code Playgroud)
需要多少级显式转换才能产生所需的结果?
当源值无法在目标类型中表示时,根据cppreference将整数转换为有符号类型
- 实现定义(C++20 之前)
- 目标类型的唯一值等于源值模 2^n ,其中 n 是用于表示目标类型的位数 (C++20 起)
GCC实现定义的行为中还指定了
为了转换为宽度为 N 的类型,该值会以 2^N 为模减少到该类型的范围内;没有发出任何信号。
我猜也有人说同样的话。我的问题是减少/模数结果是否仍然可能超出目标签名类型的范围?比如说signed char c = 255,255 模 2^8 仍然是 255,没有变化。这个模数结果如何适合目标类型?
这个答案展示了一种方法,首先将值反转并加 1,然后在前面添加一个有符号位。我不确定这是否是实际所做的。
解释强调部分的正确/标准方法是什么?
c++ implicit-conversion c++20 implementation-defined-behavior
我一直在尝试理解这两个定义之间的区别以及如何正确使用它们。
在我看来,定义一个二维数组将arr[length][width]矩阵的内容一行一行地连续存储在内存中(矩阵本质上是一大行),这样您就可以用这种方式访问 i,j 坐标中的数字*(arr+width*i+j): 。当将其发送到函数时,可以进行声明,func(int *arr)并且由于二维数组在内存中的表示方式,您访问矩阵内容不会有问题。
而将数组定义为似乎int *arr[];并没有以相同的线性、连续的方式将矩阵的内容存储在内存中。函数的声明必须是func(int **arr) or (int *arr[])。虽然您仍然可以通过坐标 i, j 访问矩阵,如下所示:arr[i][j],但似乎不可能这样做:*(arr+width*i+j)。我的想法是否正确,因为以这种方式定义二维矩阵不会将矩阵的行连续存储在内存中,还是我遗漏了一些东西?
c pointers multidimensional-array implicit-conversion function-declaration
在代码中实现逻辑运算时,发现一个现象,不应该在if语句中输入。原来这是AND (&&)-1和自然数的运算。
我不知道为什么在下面的相同代码中打印值 1。我直接运行1的补码和2的补码等计算,但没有得出1。
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = -1;
int c = a && b;
printf("test = %d",c);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 问题是这样的:
#include <stdio.h>
int main()
{
int a[2][2] = { {6, 2}, {3, 4} };
int (**p)[2];
p = a;
for (int i = 0; i < 4; i++) {
printf("%p\n", (*p + i));
printf("%d\n", *(*p + i));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我将其解释int(**p)[2];为一个指向大小为 2 的一维数组的双指针。
我得出这个结论是因为:
int *p[2];表示大小为 2 的整数指针数组。int (*p)[2];表示指向大小为 2 的一维数组的整数指针。所以,
int **p[2];表示大小为 2 的整数双指针数组。int (**p)[2];表示指向大小为 2 的一维数组的整型双指针。1、2、3 和 4 项陈述中哪些是正确的,哪些需要更正?
因此,这段代码的输出是什么?
我在这里尝试过。
bool在C++中,将a赋值给true和将其赋值给1(或任何非零整数)之间有什么区别吗?
我见过许多有竞争力的程序员甚至在提前编写代码的情况1下都使用true而不是,所以我想知道除了打字速度更快之外是否还有任何好处。
可能重复:
在C#中使用var关键字
对于C#来说比较新,我想知道MS必须引入var隐式类型变量的动机.文件说:
隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型.
进一步说:
在许多情况下,var的使用是可选的,只是语法上的便利
这一切都很好,但在我看来,这只会引起混乱.
假设你正在审查这个for循环.
foreach (var item in custQuery){
// A bench of code...
}
Run Code Online (Sandbox Code Playgroud)
而不是审查循环的内容和语义,我会花费宝贵的时间来寻找项目的类型!我宁愿选择以下内容:
foreach (String item in custQuery){
// A bench of code...
}
Run Code Online (Sandbox Code Playgroud)
问题是:我读到隐式类型变量在处理LINQ时有帮助,是否真的有助于在其他场景中使用它?
public static implicit operator byte(BytesType o) { return ConvertTo<byte>(o); }
Run Code Online (Sandbox Code Playgroud)
以上是从类型的对象o隐式转换BytesType为byte.
但是以下是做什么的
public static implicit operator byte?(BytesType o) { return ConvertTo<byte>(o); }
Run Code Online (Sandbox Code Playgroud)
特别是条件运算符.条件运算符表示什么?
提前致谢.
我有一个作业,我有以下代码摘录:
/*OOOOOHHHHH I've just noticed instead of an int here should be an *short int* I will just left it as it is because too many users saw it already.*/
int y=511, z=512;
y=y*z;
printf("Output: %d\n", y);
Run Code Online (Sandbox Code Playgroud)
哪能给我Output: -512.在我的任务中,我应该解释原因.所以我很确定这是因为隐式转换(纠正我,如果我错了:))从将int值赋给short int发生.但是我的导师说,事情恰好发生了,我想是"三轮".我找不到任何关于它的事情,我正在看这个视频,那个人解释(25:00)几乎和我告诉我的导师一样.
这是我的完整代码:
#include <stdio.h>
int main() {
short int y=511, z=512;
y = y*z;
printf("%zu\n", sizeof(int));
printf("%zu\n", sizeof(short int));
printf("Y: %d\n", y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我如何编译它:
gcc -pedantic -std=c99 -Wall -Wextra -o hallo hallo.c …Run Code Online (Sandbox Code Playgroud) 我在angular中创建了一个指令,其范围不是孤立的
<div ng-controller="myController">
<ul>
<li myDirective="model[1].list" >a lot more things will happen inside here</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
控制器:
app.controller("myController",["$scope",function($scope){
$scope.model = [
{
list:[ "object1","object2","object3" ]
},
{
list:[ "object4","object5","object6" ]
},
{
list:[ "object7","object8","object9" ]
}
]
}]);
Run Code Online (Sandbox Code Playgroud)
指示:
app.directive("myDirective",[function(){
return {
scope:true,
controller:function($scope,$element,$attrs){
/*
How do I directly be able to manipulate from inside here what is assigned
on the $attrs.myDirective
without ISOLATING the scope of the directive
*/
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
我使用的解决方案之一是这个函数我把它放在指令中并处理分配给$ attrs.myDirective的字符串它与"model.list"很好用但是与"model [2] .list"它不是因为它不是为它而建.如何修改此功能或是否有更好的解决方案...
$scope.rediks = function(string) …Run Code Online (Sandbox Code Playgroud)