相关疑难解决方法(0)

在C和C#中将int提升为unsigned int

看看这个C代码:

int main()
{
    unsigned int y = 10;
    int x = -2;
    if (x > y)
        printf("x is greater");
    else
        printf("y is greater");
    return 0;
}
/*Output: x is greater.*/ 
Run Code Online (Sandbox Code Playgroud)

我理解为什么输出是x更大,因为当计算机比较它们时,x被提升为无符号整数类型.当x被提升为无符号整数时,-2变为65534,绝对大于10.

但是为什么在C#中,等效代码会产生相反的结果呢?

public static void Main(String[] args)
{
    uint y = 10;
    int x = -2;
    if (x > y)
    {
        Console.WriteLine("x is greater");
    }
    else
    {
        Console.WriteLine("y is greater");
    }
}
//Output: y is greater. 
Run Code Online (Sandbox Code Playgroud)

c c# int

13
推荐指数
2
解决办法
1278
查看次数

整数算术产生一个奇怪的结果(除法后舍入?)

在Linux上使用gcc版本4.8.4,short是16位,int是32位.

#include "stdio.h"
int main( void ){
  unsigned short u = 0xaabb;
  unsigned int   v = 0xaabb;
  printf ("%08x %08x\n", u, (unsigned short)((u*0x10001)/0x100));
  printf ("%08x %08x\n", v, (unsigned short)((v*0x10001)/0x100));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

0000aabb 0000bbab
0000aabb 0000bbaa
Run Code Online (Sandbox Code Playgroud)

这可以改变,例如,通过除以0x10,其为第一种情况产生类似的结果(+1).如果截断的字节/0x100小于0x80 ,则不会发生这种效应.第一种情况(short u)的机器代码看起来好像是要进行一些舍入(添加0xFF).

  1. 结果是什么原因还是错误?
  2. 其他编译器的结果是什么?

c

12
推荐指数
1
解决办法
712
查看次数

为什么这个if条件失败用于比较负整数和正整数

#include <stdio.h>

int arr[] = {1,2,3,4,5,6,7,8};
#define SIZE (sizeof(arr)/sizeof(int))

int main()
{
        printf("SIZE = %d\n", SIZE);
        if ((-1) < SIZE)
                printf("less");
        else
                printf("more");
}
Run Code Online (Sandbox Code Playgroud)

编译后的输出gcc"more".为什么if条件,即使失败-1 < 8

c c++ comparison signed if-statement

7
推荐指数
4
解决办法
6381
查看次数

标签 统计

c ×3

c# ×1

c++ ×1

comparison ×1

if-statement ×1

int ×1

signed ×1