Если я прав в C ++, младший бит является последним битом и определяет знак целого числа. Так, например, в случае 8-битного 1111 1111 будет -127, а 1111 1110 будет 127. Пожалуйста, исправьте меня, если я ошибаюсь, но это не имеет отношения.
Я бы проверил для знака целое число в Go, поэтому я написал следующее:
func signCheck(n int8) {
var sign int8 = 1<<7
if n&sign == 1 {
fmt.Printf("%d is odd - %b\n", n, n)
} else {
fmt.Printf("%d is even - %b\n", n, n)
}
}
Это выведет «константы 128 переполнений int8», но это имеет смысл, потому что для определения числа используется только 7 бит. Поэтому я изменил следующим образом:
func signCheck(n int8) {
if n&1<<7 == 1 {
fmt.Printf("%d is odd - %b\n", n, n)
} else {
fmt.Printf("%d is even - %b\n", n, n)
}
}
В этом случае мне не нужно говорить, что это int8, но я протестировал его с -127 и 127 и получил следующие отпечатки:
-127 is even - -1111111
127 is even - 1111111
Так в таком случае, как мне проверить наличие знака? go версия go1.13.1 linux / amd64