Tag: 符号

在C中翻转双/浮点符号的最快方法

在C中翻转双(或浮点)符号的最快方法是什么? 我想,直接访问符号位将是最快的方法,并找到以下内容: double a = 5.0; *(__int64*)&a |= 0x8000000000000000; // a = -5.0 float b = 3.0; *(int*)&b |= 0x80000000; // b = -3.0 但是,上述内容不适用于负数: double a = -5.0; *(__int64*)&a |= 0x8000000000000000; // a = -5.0

如何在Visual Studio项目中引用用户定义的段的开头?

我正在努力转换与gnu工具链的ld链接的C程序,以使其作为visual-studio(2005)项目进行编译。 该程序将.data-symbols放在不同的段中,在初始化阶段,它在段之间复制数据。 指向段开头和结尾的指针在ld链接描述文件中定义。 我理解如何将变量定位到不同的,用户定义的段中,但我还没有弄清楚如何定义链接器常量,如_start_of_my_segment,或者是否有类似于Visual Studio中的链接描述文件。 我的目标是能够编译程序,最好不要修改引用链接器定义的符号的源代码,而是使用我自己的Visual Studio项目中的数据自定义布局。 下面是一些示例C代码,用于说明我想要做什么以及与gcc / ld链接时使用的make脚本的(精简,可能是语法错误)版本。 任何提示将不胜感激! #pragma data_seg( “MY_DATA_FOO” ) #pragma data_seg( “MY_DATA_BAR” ) #pragma comment(linker, “/section:MY_DATA_BAR,R”) __declspec(allocate(“MY_DATA_FOO”)) int foo1; __declspec(allocate(“MY_DATA_FOO”)) int foo2; __declspec(allocate(“MY_DATA_BAR”)) int bar1 = 1; __declspec(allocate(“MY_DATA_BAR”)) int bar2 = 2; #pragma data_seg( ) void test() { foo1 = bar1; foo2 = bar2; // i would rather do […]

剥离符号的最佳方法

上周我发布了一个应用程序的Linux和Windows版本。 在发布之后,我们意识到符号没有被剥离,我的经理认为(我不同意)它可能允许用户理解我们的算法。 无论如何,现在,我将不得不清理符号并重新发布应用程序。 我的问题, 在Linux中剥离符号的最佳方法是什么? 在Windows中删除符号的最佳方法是什么?

汇编中如何为无符号整数分配负数?

我学会了2’s Complement和未签名并签署了int。 所以我决定测试我的知识,据我所知,负数以2’s complement方式存储,因此加法和减法不会有不同的算法和电路会很简单。 现在,如果我写 int main() { int a = -1 ; unsigned int b = – 1 ; printf(“%d %u \n %d %u” , a ,a , b, b); } 输出结果为-1 4294967295 -1 4294967295 。 现在,我看了位模式和各种事情,然后我意识到2的补码中的-1是11111111 11111111 11111111 11111111 ,所以当我用%d解释它时,它给出-1 ,但是当我使用%u解释时,它将其视为正数,因此它给出了4294967295 。 我检查了程序集的代码是 .LC0: .string “%d %u \n %d %u” main: push rbp […]

32位有符号整数乘法,不使用64位数据类型

我想在不使用64位数据类型的情况下进行32位有符号整数乘法。 我的输入是Q1.31(两种)格式。 input1 = A32 (Ah Al) – higher, lower half’s of A32 input2 = B32 (Bh Bl) – higher, lower half’s of B32 结果应为Q1.31格式,保留溢出情况。 我需要C代码。 请提供格式说明。