numeric_limits<T>::min();
numeric_limits<T>::lowest();
Run Code Online (Sandbox Code Playgroud)
两个函数返回的值有什么不同?
有没有办法知道对象是const对象还是常规对象,例如考虑以下类
class String
{
String(const char* str);
};
Run Code Online (Sandbox Code Playgroud)
如果用户String
从那时创建一个const对象,没有理由复制传递的本机字符串,并且由于他不会对其进行任何操作,他唯一要做的就是获取字符串大小,字符串搜索和其他不会改变的函数字符串.
我有两个类int_t
,uint_t
有符号类型和无符号类型:
template <typename lo_t> struct uint_t;
template <typename hi_t, typename lo_t>
struct int_t
{
lo_t lo;
hi_t hi;
int_t() : hi(0), lo(0) {}
int_t(int value) : lo(value), hi(value<0? -1: 0) {}
int_t(unsigned value) : lo(value), hi(0) {}
int_t(const uint_t<lo_t>&);
//template<typename ty_a, typename ty_b> int_t(const int_t<ty_a, ty_b>&);
};
template <typename hi_lo>
struct uint_t
{
hi_lo lo, hi;
uint_t() : lo(0), hi(0) {}
uint_t(int value) : lo(value), hi(value<0? -1: 0) {}
uint_t(unsigned value) : lo(value), hi(0) {}
template<typename …
Run Code Online (Sandbox Code Playgroud) 我去 Nuget.org 获取 Microsoft.AspNetCore.Mvc.Core 3.0.0 但没有找到它,微软有什么理由不推送这些包吗?
你最好看看桌子,了解我想要的东西:
?????????????????????????????????????????????
? name ? sign ? exponent ? fraction ?
?????????????????????????????????????????????
?float16 ? 1 ? 5 ? 10 ?
?????????????????????????????????????????????
?float32 ? 1 ? 8 ? 23 ?
?????????????????????????????????????????????
?float64 ? 1 ? 11 ? 52 ?
?????????????????????????????????????????????
?float128? 1 ? 15 ? 112 ?
?????????????????????????????????????????????
?float256? 1 ? ???? ? ???? ?
?????????????????????????????????????????????
?float512? 1 ? ???? ? ???? ?
?????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我的问题是如何计算指数和分数的位数给定总位数,如256,512或1024.
我已经创建了自己的固定类型整数类型,并且该库适用于许多编译器和平台,唯一需要解决的问题是从内置浮点类型转换为我的类型.
该浮点类型可有小尾数但随着指数沿着它可能有很大的价值,如果我选择投float
,double
或者long double
说long long
或unsigned long long
可能发生截断.
如果编译器使用IEEE-754规范,那么提取尾数和指数很容易,但如果编译器使用其他格式则会怎样.
所以,我的问题是:是否有任何通用算法允许我仅使用语言功能从浮点数中提取完整值?
谢谢
编译器将源代码作为字符串处理,所以在C++中,例如当它鼓励类似于unsigned char x = 150;
它的类型限制的语句时unsigned char
必须在0
和之间的范围内255
.
我的问题是,数字150
仍然是字符串,编译器使用什么算法比较数字序列 - 150
在这种情况下 - 与类型限制?
我为一个十进制,八进制,十六进制和小端二进制的类型'int'做了一个简单的算法,但我不认为编译器会这样做以检测数字溢出.
我制作的算法用C++编码:
typedef signed char int8;
typedef signed int int32;
#define DEC 0
#define HEX 1
#define OCT 2
#define BIN 3
bool isOverflow(const char* value, int32 base)
{
// left-most digit for maximum and minimum number
static const char* max_numbers[4][2] =
{
// INT_MAX INT_MIN
{ "2147483647", "2147483648" }, // decimal
{ "7fffffff", "80000000" }, // hexadecimal …
Run Code Online (Sandbox Code Playgroud) 我创建了一个应用程序来计算64位范围内的素数,所以当我尝试使用i的sqrt
函数计算64位数的平方根时,math.h
发现答案是不准确的,例如当输入是~0ull
答案应该是~0u
但是我得到的是0x100000000
哪个不对,所以我决定用汇编x86语言创建我自己的版本,看看这是不是一个bug,这是我的函数:
inline unsigned prime_isqrt(unsigned long long value)
{
const unsigned one = 1;
const unsigned two = 2;
__asm
{
test dword ptr [value+4], 0x80000000
jz ZERO
mov eax, dword ptr [value]
mov ecx, dword ptr [value + 4]
shrd eax, ecx, 1
shr ecx, 1
mov dword ptr [value],eax
mov dword ptr [value+4],ecx
fild value
fimul two
fiadd one
jmp REST
ZERO:
fild value
REST:
fsqrt
fisttp value
mov …
Run Code Online (Sandbox Code Playgroud) 为什么UTF-16在UCS数据库中有保留范围?
UTF-16只是一种使用一个或两个表示字符标量值的方法unsigned 16-bits
,这些值的布局不应与字符标量值相关,因为我们应该应用一些算法来从这种表示中获取实际的字符标量值.
假设保留范围D800-DBFF
并且DC00-DFFF
不在UCS数据库中保留,并且还有另一种UTF-16表示,它可以表示0-7FFF
单个范围内的所有字符unsigned 16-bits
,当设置高位时,则跟随另一个16位.比特,对于字节顺序标记,我们将保留两个可能的值,就是这样.
如果我错了,你可以向我解释一下.
谢谢
假设我们有以下课程
class Data
{
public:
Data() : i(new int) { *i = 0; }
~Data() { delete i; }
private:
int *i;
};
Run Code Online (Sandbox Code Playgroud)
现在我们创建100个Data类型元素的数组
Data* dataArray = new Data[100];
Run Code Online (Sandbox Code Playgroud)
我们知道operator new会为100个对象调用Data构造函数,因为它知道创建了多少个对象,现在让我们删除这个数组,如果我们说delete dataArray
只调用第一个对象的析构函数,即使我们知道100个对象的内存我们被释放 - 将导致内存泄漏 - 并且因为它们被分配为一个块,但是如果我们说delete[] dataArray
将调用100个对象的析构函数,但这是一个dynmaic内存并且我没有指定那里有多少个对象我知道数组没有任何开销来知道其中有多少对象,那么运行时环境如何知道在释放内存之前要销毁的对象数量?
我已经可以存储在所有32位质数unsigned int
和我想用它来生成一些64位的素数。即使在逻辑和编译方面进行了优化,使用试验除法也太慢了。
我正在尝试修改埃拉托色尼筛以使用预定义列表,如下所示:
问题是第 3 步使用模数来找到素数倍数,这样的操作是我没有使用跟踪除法的原因。
有没有更好的方法来实现第 3 步或整个算法。
谢谢你。
我知道这个问题被问了很多次,我没有问如何做到这一点,因为我是在编译时这样做的。我的问题是它是如何工作的,因为这是我不明白的。
当将 a 传递char[]
给函数时,它会丢失其信息并变成char*
,因此我们无法在编译时使用模板获取字符数组的大小,所以我尝试传递字符串本身并且它有效:
template <int N> inline int arr_len(const char (&)[N]) { return N - 1; }
#define STR "this is an example!"
const char *str_ptr = STR;
int main()
{
int array_size = arr_len(STR);
}
Run Code Online (Sandbox Code Playgroud)
我使用 VC++ 2008、Intel C++ 12 和 GCC 4.7 测试了这段代码,它可以工作。
通过传递字符串本身,编译器将其视为const char[]
- 至少我是这么认为 - 并且他能够获取字符串大小,这怎么可能?