我在MSDN文档中看到,最大值Int32
是2,147,483,647
十六进制0x7FFFFFFF
.
http://msdn.microsoft.com/en-us/library/system.int32.maxvalue.aspx
我认为,如果它Int32
应该存储32位整数值,最终应该是4,294,967,295
十六进制0xFFFFFFFF
.
我的问题是为什么Int32
存储Int32
位整数值?
我注意到我的电脑上有一个奇怪的东西。*手写的可分性测试明显比%
算子快。考虑最小的例子:
* AMD 锐龙 Threadripper 2990WX,GCC 9.2.0
static int divisible_ui_p(unsigned int m, unsigned int a)
{
if (m <= a) {
if (m == a) {
return 1;
}
return 0;
}
m += a;
m >>= __builtin_ctz(m);
return divisible_ui_p(m, a);
}
Run Code Online (Sandbox Code Playgroud)
该示例受奇数a
和 的限制m > 0
。然而,它可以很容易地推广到所有a
和m
。代码只是将除法转换为一系列加法。
现在考虑使用以下命令编译的测试程序-std=c99 -march=native -O3
:
for (unsigned int a = 1; a < 100000; a += 2) {
for (unsigned int m …
Run Code Online (Sandbox Code Playgroud) 这源于今天早些时候关于bignum库和gcc特定的C语言攻击主题的问题.具体来说,使用了这两个声明:
typedef unsigned int dword_t __attribute__((mode(DI)));
Run Code Online (Sandbox Code Playgroud)
在32位系统和
typedef unsigned int dword_t __attribute__((mode(TI)));
Run Code Online (Sandbox Code Playgroud)
在64位系统上.
我假设这是对C语言的扩展,没有办法实现它在当前(C99)标准中实现的任何目标.
所以我的问题很简单:这个假设是否正确?这些陈述对底层内存有何影响?我认为结果是我2*sizeof(uint32_t)
对于dword
32位系统和2*sizeof(uint64_t)
64位系统,我是否正确?
是否有可能从批处理文件中触发Windows"闪存任务栏按钮X次或直到窗口到达前台"行为?我试图在完成时将用户的注意力转移到长时间运行的脚本上.
只要不需要安装(即可执行文件可以与我的脚本捆绑在一起),使用外部程序来触发闪存就可以了.
更新
这就是我最终得到的(Andreas'Delphi代码的极简主义端口).我在MinGW下编译它似乎只依赖于KERNEL32.DLL和USER32.DLL,所以应该是高度可移植的.
闪烁三次,然后保持突出显示直到前景.
#define WINVER 0x501
#define _WIN32_WINNT 0x501
#include <windows.h>
void main(int argc, char **argv) {
FLASHWINFO info = { sizeof(info), GetConsoleWindow(), FLASHW_TIMERNOFG | FLASHW_TRAY, 3, 0 };
FlashWindowEx(&info);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试用4个复合字节构建一个32位浮点数.有没有比使用以下方法更好(或更便携)的方法?
#include <iostream>
typedef unsigned char uchar;
float bytesToFloat(uchar b0, uchar b1, uchar b2, uchar b3)
{
float output;
*((uchar*)(&output) + 3) = b0;
*((uchar*)(&output) + 2) = b1;
*((uchar*)(&output) + 1) = b2;
*((uchar*)(&output) + 0) = b3;
return output;
}
int main()
{
std::cout << bytesToFloat(0x3e, 0xaa, 0xaa, 0xab) << std::endl; // 1.0 / 3.0
std::cout << bytesToFloat(0x7f, 0x7f, 0xff, 0xff) << std::endl; // 3.4028234 × 10^38 (max single precision)
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有以下for each
C++代码:
for (auto item : myVector)
{
std::cout << item;
if (item == orderBy.IsLast()) // <--- Check if this is the last element
std::cout << "(Is last element) " << std::endl;
else if (item == orderBy.IsFirst()) // <-- Check if this is the first element
std::cout << "(Is first element)" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当然,IfLast()
和IfFirst()
不上不存在std::vector
.是否有本地std::
方法来检查第一个和最后一个元素?
不,不是ASCII图形,请看这里的截图:
http://en.wikipedia.org/wiki/W3m
这怎么可能呢?
我检查了源,它只打印字符序列.但是,我无法在xterm文档或其他地方找到任何对图形绘制或图像嵌入转义序列的引用.
w3m似乎也是唯一这样做的软件.
这里是矢量图形泰克仿真,但是这是在VT模式下进行.
也许我在寻找错误的东西?
任何的想法?
我有8个bool
变量,我想将它们"合并"成一个字节.
有一个简单/首选的方法来做到这一点?
相反,如何将一个字节解码为8个独立的布尔值?
我认为这不是一个不合理的问题,但由于我无法通过谷歌找到相关文档,它可能是另一个"非你所有直觉都是错误的"案例.
一段代码:
long rangeVar = 0;
rangeVar = atol(p_value);
if (rangeVar >= -2147483648 && rangeVar <= 2147483647)
Run Code Online (Sandbox Code Playgroud)
在编译时,我得到:
警告:此十进制常量仅在ISO C90中无符号
提前致谢
我试图制作一个拖放批处理文件.
我有一个问题,文件存在,但批处理文件找不到它...
我想将.png
文件(如pict_2013020808172137243.png
)复制到另一个文件夹并重命名.
在路径中是符号_
和空格,我也不知道如何使多拖放来制作相同的功能(重命名和添加.zip
).
我尝试了这个,但没有结果:(
@ECHO OFF
ECHO %1
COPY "%1" "%CD%\test\" /Y /S
REN "%CD%\mob\*.png" "%CD%\test\test.png"
7za u -tzip "%appdata%\.virto\pack.zip" "test" -r
Run Code Online (Sandbox Code Playgroud) c ×3
c++ ×3
batch-file ×2
attributes ×1
bignum ×1
bit-packing ×1
boolean ×1
c# ×1
c++11 ×1
c89 ×1
c99 ×1
copy ×1
endianness ×1
for-loop ×1
graphics ×1
int32 ×1
iso ×1
long-integer ×1
math ×1
modulo ×1
parameters ×1
path ×1
portability ×1
taskbar ×1
terminal ×1
types ×1
windows ×1
x11 ×1
x86 ×1
xterm ×1