当我们在int上进行操作时,结果是暂时存储在int中的结果
When we undertake an operation on an int, is the result temporarily stored in an int?
我在使用C的在线法官上解决了一个问题,我遇到了这个问题。
约束:t< = 10 9
当我宣布t是int时,我得到了一个错误的答案,当我宣布长期很长时间时,答案就被接受了。
该解决方案涉及以下数学计算:
m = (-3 + sqrt(12*t - 3))/(float)6 ;
我在想12 * t - 3
可能被存储在int中,尽管暂时是错误的。有人可以告诉我我是否对吗?
是。计算之前,小于int
的类型将升级为int
(或unsigned int
),但是使用int
计算会导致新的int
。
如果您的结果会溢出int
,则最好确保至少一种操作数是一种足够大以保持结果的类型。
如果t是int 12*t
是肯定的。C表达中的推断的类型是从自下而上的。这意味着将12*t的(临时)结果存储在32位整数寄存器中,它溢出了限制(约为2e 9左右),您会遇到错误的结果。一个聪明的编译器可能会警告您,因为它可能会从某些情况下会从代码中推断出来。
如果将t声明为 long long
,则它的范围高达2^63,提供了8e 18的范围。在这种情况下,表达式12*t
也键入long long
,并存储在64位寄存器中(或一对32寄存器,如果您的计算机没有64位寄存器),并且该表达式给出了正确的结果。
相关文章:
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 在c++中获取两个大int,并将它们存储在数组中
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如果 x < 10,则添加前导 0 并将其存储为 int
- 如何读取 TXT 文件并仅将 int 存储在 C 中
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 如何声明一个必须在C++中同时存储int和char值的2D数组
- 如果char可以在C++中存储数字,为什么我们需要int
- 如果我在 C++ 中为 int 提供双精度,输入缓冲区中存储了什么?
- 我应该使用无符号字符而不是 int 来存储永远不会大于 255 的值吗?
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 什么是在C 中存储结果INT*的最佳数据类型
- char*中存储的返回int值(0-255)给出了负值
- 将字符指针按顺序存储在 map 中 std::map<char*, int> mymap。将其存储为字符或字符串不是一个选项
- 如何在文件中节省空间地存储和检索 std::vector<int> 值
- 如何将char和int存储在同一个变量中
- c++int存储为char*转换中的字符,无需任何API
- Vector将int存储为ascii码
- c++11将数据从一个int*存储到另一个int