irb의'~(턱화부)'에 따라 비트 반전

4325 단어 RubyC##irb
mypc:~ current$ irb
irb(main):001:0> "irb完全に理解した".length
=> 10
irb(main):002:0> ~
irb(main):003:0* "irb完全に理解した".length
=> -11
irb(main):004:0> 

개시하다


사건의 발단은 상술한 것이다.뭐 하는지 간단히 설명해 주세요.
1行目$ irb実行
2行目> "irb完全に理解した"という文字列に対しlengthメソッドを実行
=> "irb完全に理解した"の文字数である10が返り値として出力
4行目> ~を入力
5行目* "irb完全に理解した"という文字列に対しlengthメソッドを実行
=> -11が返り値として出力される
왜 입력했는지는 문제가 아니다.
여기서 생기는 의문은 다음과 같은 세 가지가 있다.
의문1,~뭐야?
힌트의 끝은 왜 *가 됩니까?
왜 1, 2의 상태에서 되돌아오는 값이 변합니까?

질문 1


~(턱화자)는 Intager 클래스의 객체(정수)를 비트 단위로 연산하는 데 사용되는 연산자(비트 연산자)의 일종이다.
비트 반전을 통해 ~a(a=Integer)로 기술하고, "a를 2진수로 변환할 때의 각각의 숫자(0이나 1)를 각각 바꾼다(0은 1, 1은 0)."
예를 들어 십진수 중의 25는 이진수에서 11001을 나타내고 ~(턱화자)로 비트를 반전시키면 00110(10진수 중의 6)을 나타낸다.

질문 2


힌트의 끝은 *입니다.irb가 "코드가 완성되지 않았습니다"라고 판단하기 때문입니다.예컨대
mypc:~ current$ irb
irb(main):001:0> hoge = "ホゲ"
=> "ホゲ"
irb(main):002:0> hoge =
irb(main):003:0* "ホゲ"
=> "ホゲ"
상기 2~3행의 처리와 4~6행의 처리는 완전히 같다고 할 수 있다.
처음 다섯 번째 줄도 연산자 ~를 묘사한 상태에서 줄을 바꾼다
irb 측은 "코드가 아직 완성되지 않았기 때문에 다음 줄은 ~반전된 어떤 값을 입력해야 한다"고 인식했기 때문이다.

질문 3


의문 1, 2의 답안에 근거하여 처음 코드를 다시 확인하다
mypc:~ current$ irb
irb(main):001:0> "irb完全に理解した".length
=> 10
irb(main):002:0> ~
irb(main):003:0* "irb完全に理解した".length
=> -11
irb(main):004:0> 
십진수의 십진수를 이진수로 변환할 때 1010이다.
이 위에 ~를 올려놓으면 0101입니다.
0101을 10진법으로 변환한 후 5로 변경합니다.
이 결과, 당신의 보답치는 5 – – – – – – – – – – – – – – –
어?

새로운 의문~ 텀블링~


하면, 만약, 만약...
의심할 만한 건 두 개밖에 없어요.
사전 요구 사항 오류 여부
역시 너의 머리가 나쁘다
교활하고 신중하다.
최초의 전제로서 나의 두뇌는 융통성이 없다.
이것마저 틀렸다면, 이 기사는 잘못한 두더지다.
그래서 남은 두 가지 전제조건, 즉 하나, 둘의 답을 의심할 수밖에 없다.
의심밖에 없어요.하지만 어쨌든 메시지를 다시 정리하고 싶어요.

~(턱화부) 정보


~(턱화부)에 대해 재조사를 진행하였다.
Google 사부에게 비트 연산자 ~ 천장 문자를 입력하여 읽어들입니다.
그래서 C#의 턱 문자에 대한 질문 페이지 대열이 났다.다른 언어에 관한 페이지지만 공통점도 있죠.
"이것은 모든 비트의 부호화 연산자이며, 또한 모든 비트의 부정이라고도 부른다."이런 거.
모든 부정...의문1에서 언급한'비트 반전'과 같은 뜻의 단어라 문제 없겠죠.
신경 쓰이는 것은 각 비트의 부호 보충이다.조심스럽게 링크를 붙이다 저기 좀 보고 올게요.
"The ~ operator produces a bitwise complement of its operand by reversing each bit:"
"~조작원은 각 비트를 반전시켜 해당 조작수의 비트 단위의 부호를 생성합니다."※구글 번역
미완성 언어인 만큼 적절한 말을 할 수는 없지만, 어감은 대체로 같다.
근데 또 등장했어.보수부호를 보충하다.구제의 결과???바코드가 뭐였지?
한마디로'~a의 형식으로 a의 코드를 생성하는 것 같다'는...

부호 수정 정보


갑자기 수학 수업이 생겼어요.봤어Wikipedia 다 썼어.
"증가된 자릿수"
이것은 보충적인 정의인 것 같다.
예를 들어 십진법에서 45에 대한 10개의 보충은 55이다
2진 1101의 2진 부호는 10010이다.

가령 ~a가 a에 대한 보충이라고 가정하면


가설을 토대로 처음 코드를 재삼 확인하다
mypc:~ current$ irb
irb(main):001:0> "irb完全に理解した".length
=> 10
irb(main):002:0> ~
irb(main):003:0* "irb完全に理解した".length
=> -11
irb(main):004:0> 
10진수 10을 2진수로 변환할 때 1010
십진수-11을 이진수로 변환하면 1111111111111111111011
...다음 네 분, 의심스럽습니다.
하지만 우선 몇 개의 조합을 검증해 보자.

가득마침내
10진수에서 값 입력(~ 제외) + 출력 값 = 모두 -1
바이너리에서 입력 값(~ 제외) + 출력 값 = 전체 11111111111111111111111111111111111111111111
나는 이 점을 알았다.

잠깐의 결론


즉, irb에서 ~(턱화기)는 11111111111111111111111111111111111111111111을 기수로 하는 기초 위에서
입력한 값을 2진법으로 변환한 값의 1111111111111111111111111111111111111111의 보충값을 반환값으로 출력한다.

11111111111111111111111111111111111111 어디서 왔어요?


나는 상황을 이해했다.영문을 모르다.
11111111111111111111111111111111
32위 중 한 명.32...?
32비트?상관 있어요?

좋은 웹페이지 즐겨찾기