小编Ngu*_* al的帖子

不同数据类型的乘法变量的顺序是否会导致不同的结果?

假设我有 3 个变量: a long、 anint和 a short

long  l; 
int   i;
short s;
long  lsum;
Run Code Online (Sandbox Code Playgroud)

如果这是纯数学,因为乘法具有可交换性,所以这些变量的顺序无关紧要。

 l * i * s = i * s * l = s * i * l.
Run Code Online (Sandbox Code Playgroud)

lsum成为这 3 个变量相乘的容器。

在 C 中,是否会出现这些变量的特定顺序导致不同结果的情况?

如果在某种情况下顺序确实很重要,不一定来自这个例子,那会是什么?

c integer-promotion

4
推荐指数
1
解决办法
840
查看次数

如何补充0xff不是0x00?

我不明白0xff的补码怎么不是0x00.这是代码:

uint8_t u8a;

u8a = 0xff;

printf( "%d\n", ~u8a );
if( ~u8a == 0x00 )
    printf( "Equal\n" );
else
    printf( "Not Equal\n" );
Run Code Online (Sandbox Code Playgroud)

printf语句显示"-256"和"不等于".我的理解中缺少什么?如果它被提升为int类型,为什么它会被提升为int类型?

c

2
推荐指数
1
解决办法
618
查看次数

一些GCC编译器如何修改常量char指针?

我正在读一本书,标题为“理解和使用C指针”。在第110页上,这些行如下:

...但是,在某些编译器(例如GCC)中,可以修改字符串文字。考虑以下示例:

  char *tabheader = "Sound";
   *tabheader = 'L';
   printf("%s\n", tabheader);   //Displays "Lound"
Run Code Online (Sandbox Code Playgroud)

继续并描述其用法const char *tabheader将阻止修改此变量。

我目前正在使用Cloud 9 / Ubuntu。我使用GCC编译了这段代码并运行了它。segmentation fault如我所料,它导致了错误。

我对书中的这些陈述感到非常困惑。一直以来,我对语句的理解char *tabheader = "Sound";const char *tabHeader = "Sound"; 现在相同,这本书在说,这取决于哪个gcc编译器

我的问题是:哪个GCC编译器允许运行此代码?你对此的看法如何?这也属于未定义的行为吗?

c gcc

2
推荐指数
1
解决办法
225
查看次数

16位int机器(MSP430)和32位int机器(ARM CORTEX)的减法结果不同

当下面的代码针对像MSP430微控制器这样的16位整数机运行时,s32得到65446.

#include <stdint.h>

uint16_t   u16c;
int32_t    s32;

int main()
{
    u16c = 100U;
    s32  = 10 - u16c;
}
Run Code Online (Sandbox Code Playgroud)

我的理解是10 - u16c获取unsigned int的隐式类型提升.数学上10 - u16c等于-90.但是如何将负数表示为unsigned int呢?当-90被提升为unsigned int时,是否意味着忽略了数字的符号?

让我们假设,数字的符号被忽略.
90的二进制表示是00000000 01011010.当这被分配给s3232位宽的有符号整数变量时,转换是如何发生的?

为了s32等于65446,90必须采用2的补码.那就是00000000 10100110.

我不了解s32成为65446 的过程.

在像ARM这样的32位宽整数机器中,s32是-90,这是正确的.

要修复在16位整型机这种情况下,需要的类型转换(int16_t)u16c.这是如何解决这个问题的?

添加s32了IAR Workbench(右下角)所示的hexa数据表示.它显示s32成为0x0000FFA6.因此,对于MSP430,从无符号16位转换为带符号32位的机器实现,它只是预先设置16 0位.

在此输入图像描述

c embedded arm msp430 cortex-m

2
推荐指数
1
解决办法
492
查看次数

标签 统计

c ×4

arm ×1

cortex-m ×1

embedded ×1

gcc ×1

integer-promotion ×1

msp430 ×1