标签: unsigned

这是如何运作的?x << = 3 = -8其中(字节)x = 127?

为什么我得到这个输出?

字节x; x = 127; x << = 3; //与x = x相同<< 3 println(x)

输出:-8

当我在纸上记下它并且弄乱了我得到的那些 - 11111000,那是= 248

我想Byte占用1个字节(8位).不知道它是签名还是未签名?我认为它要签名?

因为C中给出的下面代码也给了我-8:

signed char x = 127; X << = 3; printf("x =%d \n",x的值);

为什么-8 ?? rgd softy

c java logic unsigned

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

将char []转换为byte []而不会丢失'bits'

我正在使用Java开发Android 2.3.3应用程序.

这个应用程序是一个iOS代码,无符号数据类型移植到Java.

在iOS上,它适用于UInt16UInt8.在一个案例中使用byte[]我正在使用char[].

但是知道我必须发送char[]一个byte[]使用DatagramPacket类.

如果char []的一个元素是128,我怎么能插入到byte []并且接收器得到128.我不知道如果我这样做会发生什么:

char c = (char)128;
byte b = (byte)c;
Run Code Online (Sandbox Code Playgroud)

哪个b有价值?
128 = 10000000. b = -1或b = 127?

如何char[]byte[]不丢失任何位的情况下转换为?

java android unsigned types

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

C长无符号int数操作

我试图在嵌入式C/C++环境中进行一些简单的变量操作.由于某种原因,我一直在得到零.

这是代码

void Heater::setPower( int newpower ) 
{
    printf("1 new power %d\n",newpower);

    if(newpower != power)
        power = newpower;
    else 
        return;

    printf("2 new power %d\n",power);

    // Set Duty
    long unsigned int newduty = 0;

    // Protect from divide by zero
    if(power <= 0)
    {
         printf("2.5 zeroed\n");
         newduty = 0;
         power = 0; 
    }
    else
         newduty = period*(power/100);

    printf("3 setduty %lu period %lu\n", newduty, period);

    setDuty(newduty);
}
Run Code Online (Sandbox Code Playgroud)

这是我收到的输出

1 new power 76
2 new power 76
3 setduty 0 period 10000000
Run Code Online (Sandbox Code Playgroud)

所以我知道收到的号码是76.我知道它已经超过了第一个障碍,第二个障碍.但不知何故,在简单的数学方程式中,它变为零."period"也是一个长的unsigned …

c embedded int unsigned long-integer

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

在gets(指针)改变char指针的值之后,scanf中的格式说明符错误("%d",unsigned short int),但为什么呢?

我最近尝试了一些C编程,偶然发现了以下问题.我正在使用带有MinGW 32位的NetBeans 7.4 64 IDE.这是一个简短的示例代码,它突出了我的问题:

int main(void) {

    unsigned short int temp;
    char *pointer;
    pointer = malloc(12 * sizeof(char));

    printf("The pointers value is %d \n", (int)pointer);
    printf("Type a short string:\n");

    gets(pointer);

    printf("The pointers value is %d \n", (int)pointer);
    printf("Type an int: \n");

//This line changes the char pointer to an apparently random value
    scanf("%d", &temp);

//Segmentation fault upon this point
    printf("The pointers value is %d \n", (int)pointer);

//And here as well
    free(pointer);


    return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

直到scanf一切都很好.读取的字符串被写入指向的内存空间指针.但是,在处理了scanf后,指针的值会发生变化,因此指针指向任何空间.所以不仅我的字符串丢失了,而且在尝试访问/释放不属于我的程序的内存时也会出现分段错误.

价值变化显然是随机的.每次我调试这个程序时,指针都会变为另一个值.

我已经推断出unsigned short int是错误的,或者说是我的scanf中错误的格式说明符(%d而不是%hu).如果我将unsigned …

c int unsigned pointers short

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

这是做什么的?如果(无符号(X-DX)<无符号(大小))

我在一段我想要了解的代码中找到了这个.这可能是一些聪明的伎俩,但我不明白.什么时候

    unsigned(x-dx)<unsigned(size)
Run Code Online (Sandbox Code Playgroud)

真正?x,dxsize都是(signed)int.从我猜测的上下文来看,x-dx不应小于零且不大于大小.但我不明白未签名的伎俩.

有人可以解释它或告诉我在哪里可以找到更多关于它的信息吗?

thx提前

c++ comparison unsigned

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

为什么编译器被unsigned int混淆为SIGSEGV?

我已经提炼了一个问题,这让我弄清楚发生了什么,但仍然不是原因.

int main() {
    unsigned int a = 2;
    char c[2] = {};
    char* p = &c[1];
    return p[1 - a];
}
Run Code Online (Sandbox Code Playgroud)

重写最后一行时更清楚一点.

    return *(p + (1 - a));      /* equivalent */
    return *(p + 1 - a);        /* works */
    return *(p + (1 - (int)a)); /* works */
Run Code Online (Sandbox Code Playgroud)

我很惊讶编译器没有在内部删除括号.而且更多的是它显然试图保持类型的暂时负面结果unsigned int.除非这不是分段错误的原因.在汇编程序输出中,带括号和不带括号的代码之间的差别很小.

-   movl    $1, %eax
-   subl    -12(%rbp), %eax
-   movl    %eax, %edx
+   movl    -12(%rbp), %eax
+   movl    $1, %edx
+   subq    %rax, %rdx
Run Code Online (Sandbox Code Playgroud)

c unsigned gcc segmentation-fault

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

为什么Visual Studio没有将无符号值显示为int?

我正在使用VS 2012,而我正在读这本教授C\C++基础的书.这本书很老了,它不是在VS中教,而是在Borland C++中教.本课程教授如何将无符号值转换为int.在书中,它表示int数字的值为-32768和32767,无符号的值为0到65535.在书中给出了数字42000,并显示为unsigned42000和int-23536.在VS中,它显示了as unsignedint42000.

#include <stdio.h>
void main(void)
{
    unsigned int value = 42000;

    printf("Show 42000 as unsigned %u\n", value);
    printf("Show 42000 as int %d\n", value);

}
Run Code Online (Sandbox Code Playgroud)

输出:

Show 42000 as unsigned 42000
Show 42000 as int 42000
Run Code Online (Sandbox Code Playgroud)

附注:尝试都%d%i; 没用.

c c++ int unsigned visual-studio-2012

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

在signed int和unsigned int之间进行转换时是否需要类型转换?

我尝试将signed int分配给unsigned int.

#include <stdio.h>

int main()
{
  int a;
  unsigned int b;
  scanf("%d", &a);
  b = a;
  printf("%d %u\n", a, b);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望编译它会导致警告我将一个int值赋给unsigned int变量.但我没有得到任何警告.

$ gcc -std=c99 -Wall -Wextra -pedantic foo.c
$ echo -1 | ./a.out
-1 4294967295
Run Code Online (Sandbox Code Playgroud)

接下来,我尝试将unsigned int分配给signed int.

#include <stdio.h>

int main()
{
  int a;
  unsigned int b;
  scanf("%u", &b);
  a = b;
  printf("%d %u\n", a, b);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

仍然没有警告.

$ gcc -std=c99 -Wall -Wextra -pedantic bar.c
$ echo 4294967295 | ./a.out
-1 …
Run Code Online (Sandbox Code Playgroud)

c unsigned signed c99 type-conversion

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

如何在java中将11111111表示为一个字节

当我说0b11111111是java中的一个字节时,它说"无法将int转换为byte",这是因为据我所知,11111111 = 256,java中的字节是有符号的,从-128到127.但是,如果一个字节只是8位数据,那么不是11111111 8位?我知道11111111可能是一个整数,但在我的情况下,它必须表示为一个字节,因为它必须以字节形式发送到一个文件.那么如何将一个带有位11111111的字节发送到一个文件(顺便说一句,这是我的问题)?当我尝试打印二进制值-1时,我得到11111111111111111111111111111111,为什么?我真的不明白签名字节是如何工作的.

unsigned signed byte bytearray

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

将uint8_t转换为signed int至少有时是不正确的吗?

在阅读以下问题的答案时

以十六进制表示形式获取缓冲区到字符串流:

我不明白为什么有要投uint8_tunsigned(或写在评论,甚至unsigned char在这之前),而铸造只是int不正确.

据我所知,没有任何转换会导致解释uint8_t成为一种基础类型,它可以(必须)成为3种char变体中的一些,从而将其作为一个字符打印出来.

但是施法有什么不对int?任何uint8_t值都应该始终适合int,因此转换似乎很简单.为什么sign-extension会使代码不正确(在评论中提到)?

UPD:

仅供参考,我想在我提到的问题中谈到的是一个案例signed char:

signed char num = -1;
std::cout << std::hex << static_cast<unsigned int>(static_cast<unsigned char>(num));
Run Code Online (Sandbox Code Playgroud)

如果f没有第二次演员,这将写成超过2 秒.

关于2的补码系统的观点似乎是不正确的,因为积分转换应该适用于将-1转换为unsigned <smth>,并且它遵循2的补数系统(即,当转换为例如uint8_t结果应该始终为255并因此被打印为0xff,甚至有不同的位模式).

c++ int unsigned casting

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