标签: signed

如何将十六进制字符串转换为有符号整数?

我得到一个十六进制字符串,需要转换为带符号的8位整数.目前我正在使用Int16/Int32进行转换,这显然不会给出8位整数的负值.如果我在十六进制中得到值255,我如何将其转换为十进制的-1?我假设我想使用sbyte,但我不确定如何正确地获得该值.

.net c# hex signed integer

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

Java负int到十六进制和后退失败

public class Main3 {
    public static void main(String[] args) {
        Integer min = Integer.MIN_VALUE;
        String minHex = Integer.toHexString(Integer.MIN_VALUE);

        System.out.println(min + " " + minHex);
        System.out.println(Integer.parseInt(minHex, 16));
    }
}
Run Code Online (Sandbox Code Playgroud)

-2147483648 80000000
Exception in thread "main" java.lang.NumberFormatException: For input string: "80000000"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:459)
    at Main3.main(Main3.java:7)
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

java parsing hex signed decimal

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

2的补充例子,为什么不随身携带?

我正在观看David Malan(这里)的一些很棒的讲座,这些讲座已经过了二元版.他谈到签名/未签名,1的赞美和2的补充表示.还增加了4 +( - 3),排列如下:

0100
1101 (flip 0011 to 1100, then add "1" to the end)
----
0001
Run Code Online (Sandbox Code Playgroud)

但他挥挥手,挥动了最后一根手.我做了一些维基百科的研究并没有得到它,有人可以向我解释为什么特定的携带(在8的 - > 16的列中)被丢弃了,但他保留了它之前的那个?

谢谢!

binary signed twos-complement

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

C(输出)中的无符号和有符号值

signed int x = -5;
unsigned int y = x;
Run Code Online (Sandbox Code Playgroud)

有什么价值y?这是怎么回事?

c unsigned signed

8
推荐指数
2
解决办法
5311
查看次数

以编程方式确定有符号整数类型的最大值

此相关问题是关于在编译时确定签名类型的最大值:

C问题:off_t(和其他有符号整数类型)的最小值和最大值

但是,我已经意识到在运行时确定有符号类型(例如time_toff_t)的最大值似乎是一项非常困难的任务.

我能想到的最接近解决方案的是:

uintmax_t x = (uintmax_t)1<<CHAR_BIT*sizeof(type)-2;
while ((type)x<=0) x>>=1;
Run Code Online (Sandbox Code Playgroud)

只要type没有填充位,这就避免了任何循环,但是如果type确实有填充位,则强制转换会调用实​​现定义的行为,这可能是信号或无意义的实现定义转换(例如,剥离符号位).

在我看来,我开始认为问题是无法解决的,这有点令人不安,并且会成为C标准的缺陷.证明我错的任何想法?

c signed overflow

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

签名整数网络和主机转换

我想将int32_t主机字节顺序转换为网络字节顺序,反之亦然.我知道htonl()函数及其变体,但这需要无符号整数.是否有标准库函数可以使用有符号整数执行相同的操作,还是我必须自己实现它?如果我必须自己实施,我应该怎么做?

我正在寻找一个适用于Linux和Mac OS X的例程.

c unix signed integer endianness

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

在C/C++中使用〜的1的补码

我正在使用Visual Studio 2013.
最近我尝试了~运算符1的补码:

int a = 10;
cout << ~a << endl;
Run Code Online (Sandbox Code Playgroud)

输出是 -11

但对于

unsigned int a = 10;
cout << ~a << endl;
Run Code Online (Sandbox Code Playgroud)

输出是 4294967296

我不明白为什么输出是-11签名的情况int.请帮我解决这个困惑.

c c++ unsigned signed ones-complement

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

Postgres数据类型NUMERIC可以存储签名值吗?

在PostgreSQL中,我想存储已签名的值-999.9- 9999.9.我可以用numeric(5.1)它吗?

或者我应该使用什么类型?

postgresql signed types postgresql-9.1

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

在C中,如何计算两个48位无符号整数之间的有符号差?

我有一个来自无符号48位纳秒计数器的两个值,它可能会换行.

我需要两倍的差异,以纳秒为单位.

我想我可以假设读数是在大致相同的时间进行的,所以对于两个可能的答案,我认为我是最安全的.

他们都存储为uint64_t.因为我认为我不能拥有48位类型.

我想计算它们之间的差异,作为有符号整数(大概int64_t),考虑包装.

所以,例如,如果我开始

x=5

y=3
Run Code Online (Sandbox Code Playgroud)

然后结果x-y2,并且如果我增加两个,x并且y即使它们包裹在最大值的顶部时也会保持这样0xffffffffffff

类似地,如果x = 3,y = 5,那么xy是-2,并且每当x和y同时递增时将保持不变.

如果我可以宣布x,y作为uint48_t和差异int48_t,我想

int48_t diff = x - y; 
Run Code Online (Sandbox Code Playgroud)

会工作的.

如何使用我可用的64位算法模拟此行为?

(我认为任何可能运行的计算机都会使用2的补码算法)

PS我可能会破解这个,但我想知道是否有一个很好的标准方法来做这种事情,下一个阅读我的代码的人将能够理解.

PPS此外,这段代码最终会出现在最严格的紧密循环中,所以有效编译的东西会很好,所以如果必须有选择,速度就会超过可读性.

c math unsigned signed

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

是否有可能在编译时测试类型是否支持C++中的负零?

有没有办法写一个类型特征来确定一个类型是否支持C++中的负零(包括整数表示,如符号和大小)?我没有看到任何直接这样做的东西,并且std::signbit似乎不是constexpr.

澄清:我问,因为我想知道这是否可能,无论用例是什么,如果有的话.

c++ signed types type-traits negative-zero

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